精华内容
下载资源
问答
  • php读取二进制文件中文字符串乱码,![图片说明](https://img-ask.csdn.net/upload/201903/06/1551846754_689716.png) 编码不管设置成utf8还是gbk都显示乱码 ![图片说明]...
  • 点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~工作与写公众号的时间仍在平衡中......今天大家分享一个十六进制文本转成十六进制字符并存储到二进制...

    点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~

    工作与写公众号的时间仍在平衡中......

     

    今天和大家分享一个十六进制文本转成十六进制字符并存储到二进制文件中的demo.

     

    程序平台:ubuntu16.04  自带gcc编译器

     

    一、程序源码

    #include <stdio.h>
    
    
    #include <string.h>
    #include <stdlib.h>  
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <errno.h>
    
    
    //采用C模式读二进制文件
    void DataRead_CMode()
    {
        FILE *fid;
        fid = fopen("binary.dat","rb");
         if(fid == NULL)
         {
          printf("读取文件出错");
          return;
          }
    
    
        unsigned char pos[8];
        fread(pos,sizeof(unsigned char),10,fid);
        for(int i = 0; i < 8; i++)
          printf("read ret: %02x\n", pos[i]);
    
    
        fclose(fid);
     }
    
    
    //将两个字符合成一个字符数据
    unsigned char trans(char * buffer)
    {
        unsigned char temp = 0;
        for(int i = 0; i < 2; i++)
        {
          temp = temp << 4;
    
    
        if(buffer[i] >= '0' && buffer[i] <= '9')
        {
            temp += buffer[i] - 0x30;
        }
        else if(buffer[i] >= 'a' && buffer[i] <= 'f')
        {
            temp += buffer[i] - 0x61 + 0x0a;
        }
        else if(buffer[i] >= 'A' && buffer[i] <= 'F')
        {
            temp += buffer[i] - 0x41 + 0x0a;
        }
        else
        {
          printf("get wrong value: %02X ,file: %s ,line: %d\n",buffer[i],__FILE__,__LINE__);
        }
      }
    
    
       return temp;
    }
    
    
    char str[] = "ffaa56fc010100ff";
    
    
     void main()
    {
    
    
      //写数据
        FILE *fid;
        fid = fopen("binary.dat","wb");
       if(fid == NULL)
       {
         printf("写出文件出错");
         return;
      }
    
    
        for(int i=0; i< strlen(str); i+=2)
      {
          unsigned char tmp = trans(&str[i]);
          printf("src: %02X \n",tmp);
    
    
          fwrite(&tmp,sizeof(unsigned char),1,fid);
      }
    
    
        fclose(fid);
    
    
        DataRead_CMode();
    }
    

    1. 主要说下将两个字符转为一组十六进制字符这块。试想一下将123分解为1 2 3三个字符,即每次对10取余然后取出字符;这里与之相反,提取出字符后每次左移4位(二进制状态下)或者说每次乘以16,再组合高位与低位字符

    还有就是注意数据类型,否则数据会溢出,unsigned char

    程序中的0x41、0x61等可与ascii表对照

     

    2. 使用linux 下的xxd命令可将二进制文件转为十六进制文件进行显示

    3. 效果图片如下

    二、小结

    找到自己学习新知识的节奏与方法!

     

    希望我的一点点儿分享能对大家有帮助,感谢!共同进步!

    如需源码,可在公众号后台留言。

    展开全文
  • 二进制文件字符串数据转换问题

    千次阅读 2018-06-14 18:05:23
    当存储为二进制文件时,读取需要进行转换,当然str到二进制格式也需要进行转换,方法如下:__author__ = 'jcy'# 保存至文件def savefile(savepath,content): fp = open(savepath,"wb") fp.write(content....

    当存储为二进制文件时,读取需要进行转换,当然,存储为二进制时,字符串也需要对二进制格式进行转换,方法如下:

    __author__ = 'jcy'
    # 保存至文件
    def savefile(savepath,content):
    fp = open(savepath,"wb")
    fp.write(content.encode()) #str转换为二进制存储
    fp.close()
    # 读取文件
    def readfile(path):
    fp = open(path,"rb")
    content = fp.read().decode()#二进制转换为str
    fp.close()
    return content
    content="I love machine learning!"
    savefile("d:\\mytest1.txt",content)
    content1=readfile("d:\\mytest1.txt")
    print(content1)

    展开全文
  • 第16周 二进制文件字符流本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1i3LxmDZ下载。期末临近,为适应OJ平台及熟悉内容,请自抽时间完成OJ平台的有关练习。第一部分 阅读程序(运行程序时,...

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接


    本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1i3LxmDZ下载。
    期末临近,为适应OJ平台及熟悉内容,请自抽时间完成OJ平台的有关练习。

    第一部分 阅读程序
    1、仔细研读例13.16、例13.17和例13.18(见下载链接),体会二进制文件和字符串流操作的一般方法。
    2、阅读下面的程序,指出其功能,并对比例13.16,找出其中的共同点和差别来。

    #include<iostream>
    #include <fstream>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    class Student
    {
    public:
        Student(void) {}
        Student(int n, char nam[20], float s):
            num(n),score(s)
        {
            strcpy(name,nam);
        }
        void setNum(int n)
        {
            num=n;
        }
        void setName(char nam[20])
        {
            strcpy(name,nam);
        }
        void setScore(float s)
        {
            score=s;
        }
        void show()
        {
            cout<<num<<" "<<name<<" "<<score<<endl;    //显示通过<<的重载实现更自然
        }
    private:
        int num;
        char name[20];
        float score;
    };
    
    int main( )
    {
        Student stud[5]=
        {
            Student(1001,"Li",85),
            Student(1002,"Fun",97.5),
            Student(1004,"Wang",54),
            Student(1006,"Tan",76.5),
            Student(1010,"ling",96)
        };
        fstream iofile("stud.dat", ios::in|ios::out|ios::binary);
    
        if(!iofile)
        {
            cerr<<"open error!"<<endl;
            abort( );
        }
    
        cout<<"(1)向磁盘文件输出个学生的数据并显示出来"<<endl;
        int i;
        for(i=0; i<5; i++)
        {
            iofile.write((char *)&stud[i],sizeof(stud[i]));
            stud[i].show();
        }
    
        cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
        Student stud1[5];
        for(i=0; i<5; i=i+2)
        {
            iofile.seekg(i*sizeof(stud[i]),ios::beg);
            iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
            stud1[i/2].show();;
        }
        cout<<endl;
        cout<<"(3)将第个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
        stud[2].setNum(1012);
        stud[2].setName("Wu");
        stud[2].setScore(60);
        iofile.seekp(2*sizeof(stud[0]),ios::beg);
        iofile.write((char *)&stud[2],sizeof(stud[2]));
        iofile.seekg(0,ios::beg);
        cout<<"(4)从磁盘文件读入修改后的个学生的数据并显示出来"<<endl;
        for(i=0; i<5; i++)
        {
            iofile.read((char *)&stud[i],sizeof(stud[i]));
            stud[i].show();
        }
        iofile.close( );
        return 0;
    }

    3、阅读下面的程序,指出其功能,体会seekg()和tellg()函数的功能及其用法
    #include<iostream>
    #include <fstream>
    using namespace std;
    const char * filename = "a.txt";
    int main ()
    {
        long l,m;
        ifstream file (filename, ios::in|ios::binary);
        l = file.tellg();
        file.seekg (0, ios::end);
        m = file.tellg();
        file.close();
        cout << "size of " << filename;
        cout << " is " << (m-l) << " bytes.\n";
        return 0;
    }

    4、阅读下面的程序,指出其功能,体会seekg()和tellg()函数的功能及其用法
    #include <fstream>
    using namespace std;
    int main ()
    {
        long pos;
        ofstream outfile;
        outfile.open ("test.txt");
        outfile.write ("This is an apple",16);
        pos=outfile.tellp();
        outfile.seekp (pos-7);
        outfile.write (" sam",4);
        outfile.close();
        return 0;
    }

    第二部分 实践项目(本周起,实践项目全部为选做,优先保证OJ平台上的训练)
    【项目1-用二进制文件处理学生成绩】
    (1)定义学生类,其中包含学号、姓名、C++课、高数和英语成绩及总分数据成员,成员函数根据需要确定。
    (2)读入学生的成绩,并求出总分,用对象数组进行存储。ASCII文件score.dat中保存的是100名学生的学号、姓名和C++课、高数和英语成绩。
    (3)将所有数据保存到一个二进制文件binary_score.dat中,最后通过键盘输入你的信息,并写入到文件中(咱不谦虚,三科全100分,也求个好运)。
    (4)为验证输出文件正确,再将binary_score.dat中的记录逐一读出到学生对象中并输出查看。
    (5)用BinaryViewer命令查看二进制文件文件


    【项目2-二进制文件浏览器】做一个类似BinaryViewer的查看二进制文件的程序,输入文件名后,可以以16进制和ASCII对照的方式列出该文件的内容,可以参考下图:


      (解决此问题标志着,我们学过的C++,已经能解决生产中很多的问题。)




    ================= 迂者 贺利坚 CSDN博客专栏=================
    |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
    |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
    |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
    ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====




    展开全文
  • 解析二进制文件 files\case10\binary,其中包含一个字符一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据,数据长度均为数据字节长度,高位在后,字符串为UTF-8编码,请...

    1、需求说明,实现细节要求:

    解析二进制文件 files\case10\binary,其中包含一个字符串和一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据,数据长度均为数据字节长度,高位在后,字符串为UTF-8编码,请解析,输出字符串内容,图片文件保存为files\case10\test.png。

    2、实现代码:

    /**
    * 
    */
    package com.igen.case10;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URISyntaxException;
    
    /**
    * 
    * @ClassName Case10
    * @Description TODO
    *
    * @author wjggwm
    * @data 2017年2月7日 上午11:46:25
    */
    public class Case10 {
    
    static final String fileName = "/test.png";
    static final String filePath = "D:/files/case10";
    static final String sourceFileName = "binary";
    
    public static void main(String[] args) {
    try {
    readFile(Case10.class.getResource(sourceFileName).toURI().getPath());
    } catch (URISyntaxException e) {
    e.printStackTrace();
    }
    }
    
    /**
    * 
    * @Description 解析二进制文件
    * @param sourceFileName
    *
    * @author wjggwm
    * @data 2017年2月7日 上午11:47:12
    */
    public static void readFile(String sourceFileName) {
    InputStream in = null;
    try {
    in = new FileInputStream(sourceFileName);
    
    // 读取字符串数据长度字节
    byte[] txtLenByte = new byte[2];
    in.read(txtLenByte);
    int txtlen = byte2ToUnsignedShort(txtLenByte, 0);
    
    // 读取字符串字节
    byte[] txtByte = new byte[txtlen];
    in.read(txtByte);
    //字符串为UTF-8编码
    String txt = new String(txtByte, "UTF-8");
    // 输出字符串
    System.out.println(txt);
    
    // 读取图片数据长度
    byte[] imgLenByte = new byte[4];
    in.read(imgLenByte);
    int imgLen = byte4ToInt(imgLenByte, 0);
    
    // 读取图片数据
    byte[] img = new byte[imgLen];
    in.read(img);
    // 生成图片文件
    saveToImgByBytes(filePath, fileName, img);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (in != null) {
    try {
    in.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    
    }
    
    /**
    * 
    * @Description 将字节写入文件
    * @param imgName
    * @param imgByte
    *
    * @author wjggwm
    * @data 2017年2月7日 上午11:07:45
    */
    public static void saveToImgByBytes(String filePath, String imgName, byte[] imgByte) {
    try {
    File dic = new File(filePath);
    if (!dic.exists()) {
    dic.mkdirs();
    }
    File image = new File(filePath + imgName);
    if (!image.exists()) {
    image.createNewFile();
    }
    FileOutputStream fos = new FileOutputStream(image);
    fos.write(imgByte);
    fos.flush();
    fos.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    
    /**
    * 
    * @Description byte数组转换为无符号short整数
    * @param bytes
    * @param off
    * @return
    *
    * @author wjggwm
    * @data 2017年2月7日 上午11:05:58
    */
    public static int byte2ToUnsignedShort(byte[] bytes, int off) {
    // 注意高位在后面,即大小端问题
    int low = bytes[off];
    int high = bytes[off + 1];
    return (high << 8 & 0xFF00) | (low & 0xFF);
    }
    
    /**
    * 
    * @Description byte数组转换为int整数
    * @param bytes
    * @param off
    * @return
    *
    * @author wjggwm
    * @data 2017年2月7日 上午11:07:23
    */
    public static int byte4ToInt(byte[] bytes, int off) {
    // 注意高位在后面,即大小端问题
    int b3 = bytes[off] & 0xFF;
    int b2 = bytes[off + 1] & 0xFF;
    int b1 = bytes[off + 2] & 0xFF;
    int b0 = bytes[off + 3] & 0xFF;
    return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
    }
    
    }



    展开全文
  • 二进制文件和二进制文件

    千次阅读 2012-09-17 14:34:53
    二进制文件和二进制文件   1. 流式文件:文件中的数据是一串字符,没有结构。 2. 文本文件是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。特别的是,文本文件是指以ASCII码方式(也称文本方式)存储...
  • 本工具类主要用来将二进制文件读取并转换成十六进制字符串,并提供了将十六进制字符串还原为二进制文件的方法。 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; ...
  • 文本文件和二进制文件的差异和区别

    万次阅读 多人点赞 2018-05-16 11:11:20
    广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件与文本文件的比较: 能存储的数据类型不同 文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。 每...
  • 文本文件和二进制文件区别:文本文件是可见字符的文件,它可以直接经ASCII转换成可见字符二进制文件是不可见字符的文件,比如txt文件但是无论是二进制文件还是文本文件,他们的存储总是二进制...
  • 二进制文件和 ASCII

    千次阅读 2019-03-20 09:59:44
    文本文件是可以看到的字符,二进制文件是不可视字符,如图片. 二进制文件: 包含在ASCII及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及...
  • 二进制文件与文本文件区别从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符''\n'',而二进制模式认为它...
  • 文本文件和二进制文件的判别

    千次阅读 2019-06-26 15:17:03
    作为程序员,从第一次接触编程开始,就知道了文件的两大类别:文本文件和二进制文件。但是,如何定义和判别这两类文件,在我的知识体系了,却一直是模糊的。直觉上,用文本方式读写的文件一定是文本文件,用二进制...
  • 二进制文件和文本文件的区别

    千次阅读 2017-04-10 22:19:10
    文本文件与二进制文件的定义  文本文件:是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。  二进制文件:是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以...
  • 首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别。文本文件是基于字符编码的文件,常见的编码有ASCII编码,...
  • 二进制文件中的字符串替换

    千次阅读 2016-07-28 22:38:39
    如果使用C++写一段内存的替换,只使用简单的比较或是memcpy等操作,来实现替换...首先要把文件内容读取到字符串中,然后从文件的开头字符进行比较,直到匹配上字符后,基于查找到的问题,替换内容,然后再回写到文件
  • 使用strings查看二进制文件字符

    千次阅读 2010-03-04 18:07:00
    http://www.linuxers.cn/2010/01/26/%E4%BD%BF%E7%94%A8strings%E6%9F%A5%E7%9C%8B%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2/
  • 介绍了换行和回车符的历史及区别; C语言处理二进制文件和文本文件的唯一区别在于对换行的处理
  • 有时候需要把文件转成二进制数组或者字符串在数据库中进行存储,下面的方式就可以很好的实现: package com.zhang.test.tools; import org.springframework.util.FileCopyUtils; import java.io....
  • C语言中二进制文件和文本文件的区别

    千次阅读 多人点赞 2015-08-27 13:51:22
    所有的信息在内存中都是以二进制的形式进行存储的,这说明了二进制文件和文本文件不是在硬件上进行区分的。  二进制和文本文件因为操作系统的不同而不同,毕竟不同的人实现同一问题的思路也不是完全一样的嘛,首先...
  • 一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。 简单来说,文本文件是基于字符编码...
  • 二进制文件和文本文件的区别详解

    千次阅读 2019-06-30 10:55:09
    为什么记事本打开二进制文件会乱码? 文本文件也是二进制文件: 总结 最近学了一些Python上的文件操作,然后对二进制文件和文本文件产生了兴趣,看了好多好多博客才对这俩的区别有了初步的认识,不同的博客有...
  • 文本文件和二进制文件学习

    千次阅读 2016-07-03 20:23:46
     二进制文件与我们通常使用的文本文件储存方式有根本的不同。这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。这样的编辑器有很多,...
  • 例子:将0X87A2 (对应字符) 写入到二进制文件效果如下 00000000 38 37 41 32 20 87 A2 20 注释:前面四个分别为字母87A2的十六进制编码,20为空格,后面87 A2为该十六进制字符显示   文件打开效果: 87A2 嚔...
  • 1、C语言中缺省是按照文本方式打开文件。...(3)二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。一般是可执行程序、图形、图象、声音等等文件。 (4)文本文件(也称为ASCII文件):它
  • 设计一个名为consumer.c的程序,它将读取二进制文件,并将二进制文件的内容转换为 ASCII 字符序列。 使用操作系统工具(如diff)检查原始文本文件和程序生成的文件是否相同。如果您不熟悉diff 命令,您可以在命令行...
  • 故要对二进制字符串进行操作,则不能使用CString,而要用CByteArraychar。关于CString:1、是actual字符串,而不是字符串指针,不需要在定义的时候指定长度2、该类重载了+、-、=等运算符,故使用该类来对字符串...
  • 二进制文件与文本文件的区别

    千次阅读 2017-05-03 16:27:48
    文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。 文本文件和二进制文件的存
  • 题目:编写程序从一个二进制文件中读入若干个字节,将每一个字节的8位逆转后,按字节的输入顺序输出到另一个二进制文件中。这里的逆转是指:当unsigned char k=0xAC(二进制值为:10101100),逆转后k为:00110101...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 550,577
精华内容 220,230
关键字:

二进制文件和字符文件