当前位置: 技术问答>linux和unix
!!!内存中二进制数据直接以二进制格式输出出来
来源: 互联网 发布时间:2016-01-23
本文导语: 如何把内存中的二进制文件直接以二进制格式输出出来(即:输出到某文件中是以二进制格式保存) 我想把一个图片文件按照base64编码协议重新编码, 但是,base64编码协议是对二进制数据进行编码的, 所以我考虑把图片文...
如何把内存中的二进制文件直接以二进制格式输出出来(即:输出到某文件中是以二进制格式保存)
我想把一个图片文件按照base64编码协议重新编码,
但是,base64编码协议是对二进制数据进行编码的,
所以我考虑把图片文件从内存中直接读出它的二进制文件
然后存储在某个文件中,
当然我在文件中能看到的形式就是二进制格式的.
怎么来实现呢?
我用fwrite试了很多次都不行.
请高人指点!
我想把一个图片文件按照base64编码协议重新编码,
但是,base64编码协议是对二进制数据进行编码的,
所以我考虑把图片文件从内存中直接读出它的二进制文件
然后存储在某个文件中,
当然我在文件中能看到的形式就是二进制格式的.
怎么来实现呢?
我用fwrite试了很多次都不行.
请高人指点!
|
假设你从文件读进来的数据是:
0x00 0x00 0x00 0x41
一共四个字节,假设是小端字节(对于基于intel i386架构的计算机,系统采用小端字节序来存放数据,所谓小端字节序是指低序字节低地址,高序字节高地址(内存地址增大方向)),那么这四个字节转换成int就是65,同理,你按顺序将这4个字节写入文件,以后读入就是一个65的int。
如果无需考虑数据的具体含义,只是将其看做二进制数据的序列,那么只要按字节一个个写入文件即可,像这样:
char* buffer = {0x01, 0x20, 0x00, 0x30, 0x02, 0x30};
int size = 10;
fwrite(buffer, size, 1, fp);
上面的buffer指向的数据就可以是你说的内存中的二进制数据。
上面说的不知道说清除没有。不过也许你在什么地方没搞清楚,你的需求其实不复杂,将图片读到buffer中,对buffer的数据进行base64编码,编码数据存到文件或者另一个buffer,即可。
我猜想你对所谓的二进制有曲解,从某种意义上说,所有的计算机处理的数据都是二进制的,所以,你说的“base64编码协议是对二进制数据进行编码的”其实有点误入歧途。实际上可能没有你想的那么复杂。
0x00 0x00 0x00 0x41
一共四个字节,假设是小端字节(对于基于intel i386架构的计算机,系统采用小端字节序来存放数据,所谓小端字节序是指低序字节低地址,高序字节高地址(内存地址增大方向)),那么这四个字节转换成int就是65,同理,你按顺序将这4个字节写入文件,以后读入就是一个65的int。
如果无需考虑数据的具体含义,只是将其看做二进制数据的序列,那么只要按字节一个个写入文件即可,像这样:
char* buffer = {0x01, 0x20, 0x00, 0x30, 0x02, 0x30};
int size = 10;
fwrite(buffer, size, 1, fp);
上面的buffer指向的数据就可以是你说的内存中的二进制数据。
上面说的不知道说清除没有。不过也许你在什么地方没搞清楚,你的需求其实不复杂,将图片读到buffer中,对buffer的数据进行base64编码,编码数据存到文件或者另一个buffer,即可。
我猜想你对所谓的二进制有曲解,从某种意义上说,所有的计算机处理的数据都是二进制的,所以,你说的“base64编码协议是对二进制数据进行编码的”其实有点误入歧途。实际上可能没有你想的那么复杂。