python 怎样读取visual c++二进制文件格式
发布网友
发布时间:2022-05-06 18:41
我来回答
共1个回答
热心网友
时间:2022-04-18 10:08
1.python 二进制文件的读写
只讨论二进制文件的读写。
以二进制的形式打开文件
with open(filename , 'wb') as fd :
#do with fd
fd.write(strobject)#二进制strobject写入文件
fd.read(byte_len)#读取byte_len字节数据
wb:表示以二进制写的方式打开文件
rb :表示以二进制读的方式打开文件
2.关于进制的转换
需要使用到struct进行打包成二进制字符串或者相应的解包成元组。
#根据format形式,把后面的变量v1,v2,...打包成字节对象形式
byte_objects = struct.pack(format,v1,v2,...)
#根据format形式,从buffer中解包出数据,返回值的形式是元组
value_tuple = struct.unpack(format,buffer)
3.读写几种数据类型的例子
#写入文件
with open('test.data','wb') as fd:
i = 1
bi = struct.pack('i',i) #'i'表示对int类型进行打包
fd.write(bi)
f = 2.1
bf = struct.pack('f',f) #'f'表示对float类型进行打包
fd.write(bf)
d = 3.1
bd = struct.pack('d',d) #'d'表示对double类型进行打包
fd.write(bd)
l = 4L
bl = struct.pack('l',l)#'l'表示对long类型进行打包
fd.write(bl)
#读取文件
with open('test.data','rb') as fd:
byte_len = 4
bi = fd.read(byte_len) #读取int类型的4个字节的二进制数据
print struct.unpack('i',bi) #解压成原来的int类型
bf = fd.read(byte_len) #读取float类型的4个字节的二进制数据
print struct.unpack('f',bf) #解压成原来的float类型
byte_len = 8
bd = fd.read(byte_len) #读取double类型的8个字节的二进制数据
print struct.unpack('d',bd) #解压成原来的double类型
bl = fd.read(byte_len) #读取long类型的8个字节的二进制数据
print struct.unpack('l',bl)#解压成原来的long类型
关于C/C++里面的数据类型在Python里面对应的数据类型以及占用的字节大小,参考下面的网站。
https://docs.python.org/3/library/struct.html#format-characters
4.测试关于c++读去python生成的文件
/**c++ ifstream**/
void readifstream(const char* filename){
cout << "ifstream " << endl;
ifstream ifs(filename,ifstream::binary);
if(!ifs){
cerr << "open file error " << endl;
exit(0);
}
int i;
float f;
double d;
long l;
ifs.read((char*)&i,sizeof(i));
ifs.read((char*)&f,sizeof(f));
ifs.read((char*)&d,sizeof(d));
ifs.read((char*)&l,sizeof(l));
ifs.close();
cout <<"i="<< i << " f="<< f <<" d="<< d <<" l=" << l << endl;
cout << "==============cout======================" << endl;
}
/**c FILE*/
void readFILE(const char* filename){
printf("readFILE\n");
FILE * fid = fopen(filename,"rb");
if(!fid){
perror("open file error \n");
exit(0);
}
const int size = 1;
int i;
float f;
double d;
long l;
fread((char*)&i,sizeof(i),size,fid);
fread((char*)&f,sizeof(f),size,fid);
fread((char*)&d,sizeof(d),size,fid);
fread((char*)&l,sizeof(l),size,fid);
fclose(fid);
printf("i=%d f=%.2f d=%.2lf l=%ld\n",i,f,d,l);
printf( "================printf====================\n");
}