加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

bin二进制文件解析

(2019-11-06 18:05:54)
标签:

二进制文件

matlab

分类: 程序调试
在做NIST test的时候需要把数据存储成bin二进制文件,如果只是单纯的数据存储和读取的话没什么问题,就用常规的读命令、写命令就可以了,但是现在的问题是如果我们想写入101011,写进二进制文件之后每一个字符都被表示成一个8bit的数,比如1写进去之后是00110001,而0变成了00110000,这俩正好是1和0在ASCII表里的数值代表,符号1是49,49的二进制是00110001,符号0是48,48的二进制是00110000。 也就是说,如果我们想把10101100存入二进制文件,结果存进去之后变成
0110001 0110000 0110001 0110000 0110001 0110001 0110000 0110000. 这样的话如果我们把他放进nist test肯定就错了。

关于二进制文件的详细解释可以参考百度百科“二进制文件”,举例
列举一个二进制文件如下:
00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54
00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50; ABCDEFGHIGKLMNOP
这里列出的是在 UltraEdit(UE) 里看到的东西。其实只有红色部分是文件内容。前面的是 UE 加入的行号。后面的是 UE 尝试解释为字符型的参考。

在Ubuntu里如果想看一个二进制文件里面的内容,可以用以下两个命令:
xxd -b yourfile.bin
hexdump -C yourfile.bin

要想按这种方式存储的话可以参考下面的代码,思路是先把 101010101010.。。按8位一组转换成字符串,然后将这8位字符串转换成对应的uint8,最后存的是这个uint8。

N=8000000;
key=randi([0 1],1,N);
key=uint8(key);

fileID = fopen('test.bin','a');
for i=1:8:N
    S=[];
    for j=i:i+7 
        if key(j)==0
             S=strcat(S,'0');
        else
             S=strcat(S,'1');
        end
    end
    number=bin2dec(S);
    fwrite(fileID,number,'uint8');
end
fclose(fileID);

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有