精华内容
下载资源
问答
  • 初学Python写二进制文件一个图片的16进制数据保存到一个txt文本,从这个txt文本读出并保存为二进制文件jpg图片文件。说明:图片读出的0xff粘贴ff到文本中,读出时是字符串的”ff”。我主要是用C语言,python为初学...

    初学Python写二进制文件

    把一个图片的16进制数据保存到一个txt文本,从这个txt文本读出并保存为二进制文件jpg图片文件。说明:图片读出的0xff粘贴ff到文本中,读出时是字符串的”ff”。

    我主要是用C语言,python为初学,python的编码思想还是用C的思想。

    一、C的实现:

    #include

    #include

    /*******************************

    函数名:DSP_2_HEX

    函数功能:字符串与十六进制数据转换

    函数输入参数:dsp 要转换的字符串的地址

    hex 转换16进制后的存放地址

    count 转换16进制后的长度

    "1234"->{0x12,0x34}

    修改: 较严格判断字符类型 ‘0’~’9’ ’A’~’F’ ‘a’~’f’

    ********************************/

    int DSP_2_HEX( unsigned char *dsp, unsigned char *hex, int count )

    {

    int i;

    unsigned char ucTmp = 0;

    for (i = 0; i < count; i++)

    {

    ucTmp = dsp[i*2];

    /*将字符转为十六进制 ‘0’~’9’->0x00~0x09、 ’A’~’F’->0x0A~0x0F ‘a’~’f’->0x0A~0x0F*/

    if(ucTmp>=0x30 && (ucTmp<=0x39))

    {

    hex[i] = ucTmp-0x30;

    }

    else if(ucTmp >= 0x41 && ucTmp<= 0x46)

    {

    hex[i] = ucTmp-0x41+10 ;

    }

    else if (ucTmp >= 0x61 && ucTmp<= 0x66)

    {

    hex[i] = ucTmp-0x61+10 ;

    }

    else

    {

    return -1;

    }

    /*第一个字符作为十六进制的高4位*/

    hex[i] = hex[i] << 4;

    ucTmp = dsp[i*2+1];

    /*将字符转为十六进制 ‘0’~’9’->0x00~0x09、 ’A’~’F’->0x0A~0x0F ‘a’~’f’->0x0A~0x0F*/

    if(ucTmp>=0x30 && (ucTmp<=0x39))

    {

    hex[i] += ucTmp-0x30;

    }

    else if(ucTmp >= 0x41 && ucTmp<= 0x46)

    {

    hex[i] += ucTmp-0x41+10 ;

    }

    else if (ucTmp >= 0x61 && ucTmp<= 0x66)

    {

    hex[i] += ucTmp-0x61+10 ;

    }

    else

    {

    return -1;

    }

    /*// 只有大写的字母可以转到十六进制

    hex[i] = ( (dsp[i*2]<=0x39)? dsp[i*2]-0x30 : dsp[i*2]-0x41+10 );

    hex[i] = (hex[i] << 4) &0xF0;

    hex[i]+= ( (dsp[i*2+1]<=0x39) ? dsp[i*2+1]-0x30 : dsp[i*2+1]-0x41+10 );

    */

    }

    return 0;

    }

    int main()

    {

    FILE *fp;

    int i = 0;

    int j =0;

    int len = 0;

    unsigned char buffer[40*1024] = {0}; //从txt文本里读出的字符串

    unsigned char photo[40*1024] = {0}; //将字符串中空格、回车等去掉后字符串

    unsigned char photoHEX[20*1024] = {0}; //转为十六进制后的数组

    int ch;

    /*从txt中读出字符保存到buffer数组*/

    fp = fopen("D:\\photo.txt","r");

    if(fp != NULL)

    {

    while((ch=fgetc(fp))!=EOF)

    {

    buffer[i] = ch;

    i++;

    }

    }

    fclose(fp);

    fp = NULL;

    len = i; //字符长度

    /*过滤掉字符串中的空格、回车(换行)、制表符*/

    for (i = 0; i

    {

    if(buffer[i]!=' ' && buffer[i]!= '\r' && buffer[i]!='\n' && buffer[i]!='\t'))

    {

    photo[j] = buffer[i];

    j++;

    }

    }

    /*将过滤后的字符串转为十六进制*/

    len = j/2; //要转换为十六进制的长度

    memset(photoHEX,0,sizeof(photoHEX));

    DSP_2_HEX(photo,photoHEX,len);

    /*保存为二进制图片*/

    fp = fopen("D:\\photo.jpg","wb");

    if(fp != NULL)

    {

    fwrite(photoHEX,1,len,fp);

    }

    fclose(fp);

    fp = NULL;

    return 1;

    }

    二、python实现

    Python直接以脚本方式,没有写成模块的方式。

    # -*- coding: utf-8 -*-

    #codeing=utf-8

    import struct

    """

    打开txt文件,并读出文件内容,保存到str类型的filet变量中

    """

    with open("D:\\photo.txt","r") as f:

    filet= f.read();

    print(type(filet)) #查看filet类型打印为

    strY = '' #建立空字符串保存过滤后的字符串

    i = 0

    """

    打开二进制文件,并把txt的字符串转换为二进制后写入

    """

    with open("D:\\photo.jpg","wb") as g:

    for x in filet : #逐个字符迭代

    if x != ' ' and x!= '\n' and x!= '\r' and x!= '\t': #过滤掉空格、回车(换行)、制表符

    strY += x #将字符串连接到strY

    i+=1;

    if(i%2 == 0): #每两个字符转换一次为HEX,并写入文件

    xHex = int(strY,16) #将两个字符转为HEX “ff ”->0x000000ff

    xHex = struct.pack("B",xHex) #将HEX数据转为unsigned char的字符串

    g.write(xHex) #write()函数参数只能为str类型

    strY = '' #strY 置为空字符串

    Struct模块的pack和unpack不在这里介绍。

    有这个测试的原因是因为,在嵌入式中读出串口摄像头返回的数据并在仿真模式下在控制台打印了出来。目的把读出来的数据写成图片文件,验证摄像头返回的数据是否正确。虽然本嵌入式中没有文件系统,但可以直接在嵌入式中的仿真模式下直接写成图片文件就可以验证,

    /*保存为二进制图片*/

    fp = fopen("D:\\photo.jpg","wb");

    if(fp != NULL)

    {

    fwrite(photoHEX,1,len,fp);

    }

    fclose(fp);

    fp = NULL;

    结果兜了一大圈来实现。吐槽一下思维僵化。

    展开全文
  • 通常二进制文件打开是堆乱码,因为记事本程序试图用字符串的方式打开,看到就是乱码。例如你写程序,int a=10;把a写入文件,用二进制文件保存,大小为4字节(int的大小), 用文本文件保存,大小为2字节,...
    二进制文件就是把内存中的数据保存在硬盘中,是内存数据的映射。文本文件就是字符串文件。
    通常二进制文件打开是一堆乱码,因为记事本程序试图用字符串的方式打开,看到就是乱码。
    例如你写个程序,int a=10;把a写入文件,用二进制文件保存,大小为4个字节(int的大小),
    用文本文件保存,大小为2个字节,因为'1','0'有两个字符。
    其实说白了,都是流式文件。
     
    流式文件有很多种, 比如说 屏幕可以认为是输出流。键盘可认为是输入流。鼠标,打印机,等等都是流。
     
    文件操作有几个小的函数,比如说

    文件使用方式
    意义
    “rt”
    只读打开一个文本文件,只允许读数据
    “wt”
    只写打开或建立一个文本文件,只允许写数据
    “at”
    追加打开一个文本文件,并在文件末尾写数据
    “rb”
    只读打开一个二进制文件,只允许读数据
    “wb”
    只写打开或建立一个二进制文件,只允许写数据
    “ab”
    追加打开一个二进制文件,并在文件末尾写数据
    “rt+”
    读写打开一个文本文件,允许读和写
    “wt+”
    读写打开或建立一个文本文件,允许读写
    “at+”
    读写打开一个文本文件,允许读,或在文件末追加数据
    “rb+”
    读写打开一个二进制文件,允许读和写
    “wb+”
    读写打开或建立一个二进制文件,允许读和写
    “ab+”
    读写打开一个二进制文件,允许读,或在文件末追加数据
    对于文件使用方式有以下几点说明:
    1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
    r(read): 读
    w(write): 写
    a(append): 追加
    t(text): 文本文件,可省略不写
    b(banary): 二进制文件
    +: 读和写
    2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
    3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
    4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。
    5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
    6) if((fp=fopen("c://hzk16","rb")==NULL)
    {
    printf("/nerror on open c://hzk16 file!");
    getch();
    exit(1);
    }
    这段程序的意义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:/ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。
    7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
    8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。

     

    读文件,写在此。

     

       1:  void CLMS511_interfaceDlg::ReadData()
       2:  {
       3:      //初始化各变量
       4:     RaderInfor raderinfor; //其实这也是初始化
       5:      //假如用指针的话,必须要用到new,这里没有用到指针。
       6:      memset(&raderinfor,0,sizeof(raderinfor));
       7:      raderinfor.flag = '#';
       8:      for(int j = 0;j < 381 ;++j)
       9:      {
      10:            raderinfor.dist[j] = MySSocket.m_DIST[j];
      11:      }
      12:      /********************写文件到data.txt*****************/
      13:      FILE *outfile = fopen("data.txt","ab");//表示二进制文件
      14:      fwrite(&raderinfor,sizeof(RaderInfor),1,outfile); //1  表示最多可存放多少个这样的数据类型。 其实就是一个结构体类型。
      15:      fclose(outfile);
      16:      count++;    
      17:  }
    fwrite函数的使用说明:
    size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

    函数的参数说明:
    buffer

    Pointer to data to be written.

    size

    Item size in bytes.

    count

    Maximum number of items to be written.

    stream

    Pointer to FILE structure.

     

     

    经验总结:靠一帧帧的读取比较靠谱。连续读一整块的内存开销太大。不值得,而且容易出错,所以,这里采用一个结构体一个结构体的传输的方法。

     

     

    MFC开发小经验:

    image

    添加事件处理程序与类在同一个窗口中。

     

     

    两个类中的变量通过实例化其中一个类变量实现。

    在一个类中调用变量,直接用成员变量即可。但不可用局部变量,但我们可以在函数中引用成员变量。

    转载于:https://www.cnblogs.com/zhuxuekui/p/3526352.html

    展开全文
  • C#如何写入二进制文件

    千次阅读 2018-05-22 17:45:16
    相比普通的文本记录方式,二进制的记录需要先将原始数据转换为byte【】格式,再通过二进制文件流进行记录。下面小编就来介绍一下C#中二进制文件的详细记录过程。工具/原料Microsoft Visual Studio 2010方法/步骤打开...

    我们在程序运行过程中有时需要将一些数据以二进制的形式记录到文本中。相比普通的文本记录方式,二进制的记录需要先将原始数据转换为byte【】格式,再通过二进制文件流进行记录。

    下面小编就来介绍一下C#中二进制文件的详细记录过程。

    C#如何写入二进制文件

    工具/原料

    • Microsoft Visual Studio 2010

    方法/步骤

    1. 打开Microsoft Visual Studio 2010, 新建名字为【写入二进制文件】的测试程序。

      在新程序界面上放置合适的控件:包括,

      用于输入原始数据的1个输入框;

      执行【写入】操作的按钮。

      C#如何写入二进制文件
    2. 添加将原始string格式转换为byte格式的方法。

      C#如何写入二进制文件
    3. 添加写入二进制文件的方法

      建立新的二进制文件流,将原始数据转换为byte格式进行写入,如果写入失败则返回0,写入成功则返回1.

      C#如何写入二进制文件
    4. 添加按钮【写入】的代码

      判断是否有输入原始数据,数据为空则报错;

      取当前时间为文件名称;

      在写入成功或失败时都给出提示。

      C#如何写入二进制文件
    5. 生成exe文件进行测试。

      C#如何写入二进制文件
    6. 输入正确的原始数值,可以写入成功。

      C#如何写入二进制文件
    7. 输入错误的数值,会提示解析失败和写入失败。

      C#如何写入二进制文件
      C#如何写入二进制文件
    8. 将记录的二进制文件,通过【UltraEdit】编辑器打开。

      C#如何写入二进制文件
    9. 可以在编辑器中看到成功记录的数据内容。

      C#如何写入二进制文件
    展开全文
  • wb:只写打开或建立一个二进制文件,只允许写数据。如文件不存在, 则建立一个空文件;如文件已经存在,则把原文件内容清空。 ab:追加打开一个文本文件,并在文件末尾写数据。如文件不存在,则 建立一个空文件;如...

    二进制文件在打开模式中使用"b"来表示

    文件使用方式意 义
    rb :只读打开一个二进制文件,只允许读数据。如文件存在,则打开后 可以顺序读;如文件不存在,则打开失败。
    wb:只写打开或建立一个二进制文件,只允许写数据。如文件不存在, 则建立一个空文件;如文件已经存在,则把原文件内容清空。
    ab:追加打开一个文本文件,并在文件末尾写数据。如文件不存在,则 建立一个空文件;如文件已经存在,则把原文件打开,并保持原内 容不变,文件位置指针指向末尾,新写入的数据追加在文件末尾。
    rb+ :读写方式打开一个二进制文件,允许读也允许写数据。如文件存在, 则打开后文件指针在开始位置;如文件不存在,则打开失败。
    wb+ :读写方式打开一个二进制文件,允许读也允许写数据。如文件不存 在,则就创建该文件;如文件存在,则打开后清空文件内容,文件 指针指向 0 的开始位置。
    ab+ :读写方式打开一个二进制文件,允许读也允许写数据。如文件不存 在,则就创建该文件;如文件存在,则打开后不清空文件内容,文 件指针指向文件的末尾位置。

    二进制文件认为数据都是字节流,因此二进制文件不存在编码的问题,只有文本文件才 有编码问题。因为二进制文件时字节流,因此也不存在 readline,readlines 读一行或者多行的 操作函数,一般二进制文件值使用 read 函数读取,使用 write 函数写入。

    文件本质 :
    文件的本质是二进制字节数据,即所有的文件都是二进制文件,文本文件只是在写时把 文本按一定编码转为二进制数据进行存储,在读时先读出二进制数据,再通过一定的编码转 为文本。

    #二进制文件 rb wb ab rb+ wb+ ab+   二进制文件不存在编码问题,一般使用read/write函数
    #文本文件写:按一定编码格式转为二进制存储,文本文件读:先读出二进制数据,再通过一定编码转为文本
    
    def writeFile():
        fobj=open("./ss.txt","wt")
        fobj.write("abc中国")
        fobj.close()
    def readFile():
        fobj=open("./ss.txt","rb")
        data=fobj.read()
        for i in range (len(data)):
            print(hex(data[i]),end=" ")
        fobj.close()
    try:
        writeFile()
        readFile()
    except Exception as err:
        print(err)
    
    
    
    
    
    
    
    展开全文
  • 创建并写入二进制文件数据

    千次阅读 2019-08-07 17:01:39
    本实例主要实现两操作创建二进制文件并写入数据;创建文件则用到了FileStream类,而写入二进制文件则用到了BinaryWriter类的构造方法;下面是该实例的详细方法。 1、 先在默认窗体From1中添加两TextBox控件,分别...
  • 二进制文件读写简介为什么二进制格式比文本格式更高效?译码空间什么时候用二进制格式去存储数据?数据持久化数值型资源数据...这篇文章有两个数据持久化的例子,以及一个将JSON文件转成二进制文件的例子。 在上一篇文
  • 二进制日志 复制解决什么问题 实现在通天服务器的数据分布 利用二进制日志增量进行 不需要太多的带宽 但是使用基于行的复制在进行大批量的更改时 会对带宽带来一定的压力 特别是跨IDC环境下进行复制 解决什么问题 ...
  • Qt 学习 之 二进制文件读写

    万次阅读 2015-06-11 16:59:26
    同时,Qt 还提供了更高级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下章则是QTextStream的相关内容。QDataStream提供了基于Q
  • dbf文件的二进制文件格式

    千次阅读 2011-09-23 13:38:44
    .dbf文件的二进制文件格式   表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。 记录...
  • 基于存储的C语言文件操作常规问题分析(文本文件与二进制文件)问题描述文本文件与二进制文件数据写入文本乱码问题fopen和open流式文件操作常用函数直接I/O文件操作常用函数 问题描述 我们都知道计算机中的数据都是...
  • 通过jni写二进制文件失败总结

    千次阅读 2014-03-27 16:47:53
    产线用到的CIT、PCBA、RUNIN等标志位,工模apk做完测试之后调用so动态库文件写入二进制文件。Write方法失败。 问题分析: 之前的项目标志位是存在productinfo/producinfo.bin二进制文件中,可以直接写成功,SC8830...
  • 例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、...
  • Oracle建立二进制文件索引的方法(转)[@more@]  Oracle text是Oracle的全文检索技术,是9i版本标准版和企业版的部分。Oracle text使用标准的sql语言索引、查找、分析存储在oracle...
  • 第二十三讲:二进制文件的操作与字符串流  * 掌握:二进制文件读写、显示...、对二进制文件的操作 前面已经介绍,二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此
  • //rb+打开二进制文本文件,允许读写,若不存在返回 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx...
  • Qt之文件详解(二)二进制文件读写

    千次阅读 2017-02-08 14:48:36
    同时,Qt 还提供了更高级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下章则是QTextStream的相关内容。 QDataStream提
  • 在上章中,我们介绍了有关QFile和QFileInfo两类的使用。我们提到,QIODevice提供了read...同时,Qt 还提供了更高级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataS...
  • 建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个建立一个结点。 /*基本模型*/ EMP *emp1; while(!feof(fp))/*读取二进制文件到尾*/ { emp1=(EMP *)malloc(sizeof(EMP)); ...
  • linux C 读二进制文件和文件读取

    千次阅读 2017-07-14 18:44:22
    access():判断是否具有存取文件的权限 相关函数  stat,open,chmod,chown,setuid,setgid 表头文件  #include 定义函数 ... access()会检查是否可以读/写某已存在的文件。参数mode有几种情况组
  • 二进制文件操作,自己参考的

    千次阅读 2012-10-09 01:10:18
    如何将串字符存储成二进制文件,而且如何读写? 问题补充: 我是菜鸟,请问你用的是不是VC啊?而且那读二进制文件呢? 我来帮他解答 图片 符号
  • Oracle text是Oracle的全文检索技术,是9i版本标准版和企业版的部分。Oracle text使用标准的sql语言索引、查找、分析存储在oracle数据库、文件或者网络里的文本及文档。Oracle text能进行关于文档的语言分析,使用...
  • 博客园首页博问闪存新随笔联系订阅管理 随笔-54 文章-0 评论-12  ...现象:在vs2008中,建立一个空项目,添加一个c++文件main.cc #include using namespace std; int main() { cout
  • 一个普通的docker环境,用于构建用锈编译并与musl而非glibc链接的静态二进制文件。 每晚在travis上建立。 如果您需要外部C依赖项和/或需要CI映像来编译Musl二进制文件,则这很有用。 在本地,如果不需要C依赖项,...
  • 在上章中,我们介绍了... 还提供了更高级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下章则是QTextStream的相关内容。 QDataStrea
  • 文件加密(加密方程为a*x^2+...例如 : 要在D盘,HDU文件夹中新建(使用fopen()函数)一个名为open.txt文本文件(即后缀名为.txt的文件) 则需要输入 D:\HDU\open.txt 以文本模式打开文件,用fputs()函数进行字符写入,fput
  • html5之文件二进制的操作

    千次阅读 2015-07-29 16:13:50
    如果一定要处理的话,只能使用charCodeAt()方法,一个个字节地从文字编码转成二进制数据,还有一种办法是将二进制数据转成Base64编码,再进行处理。这两种方法不仅速度慢,而且容易出错。ECMAScript 5引入了Blob对象...
  • 在上章中,我们介绍了有关QFile和QFileInfo两类的使用。我们提到,QIODevice提供了read()、readLine()等基本的操作。... 还提供了更高级的操作:用于二进制的流QDataStream和用于文本流的QTextStream
  • JavaScript-二进制二进制数组

    万次阅读 2016-07-03 18:09:40
    在ES5中引入了Blob用于处理二进制。在ES6中引入了ArrayBuffer、TypedArray、DataView用于处理二进制数组。...BlobBlob(Binary Large Object)对象代表了二进制数据,提供了系列操作接口。其他

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,820
精华内容 49,128
关键字:

怎样建立一个空的二进制文件