python3二进制文件读写,C语言读写二进制文件
概述Python读写文件的二进制数据比C/C语言复杂得多。主要区别在于bytes类型和其他基本数据类型(比如int/float)之间的转换。
转换工具一般使用struct库。
读出数据,在open函数中使用rb作为打开文件的模式,然后使用struct.unpack函数解析bytes数据。
具体可参考open函数和stuct.unpack函数的描述。
数据文件中的二进制数据如下图所示:
Import struct# rb的意思是用二进制形式的open(rD:\temp\test.raw )打开文件,Mode=rb) as f: #移动到指定的字节位置f.seek(3) #读入16个字节a=f.read(16) #打印A类型字节print(type(a)) #打印A中的字节数(len(a)) #打印A中的数据,显示十六进制数的print(A)16个字节被解析为4个无符号的短数据和2个无符号的int数据, 并且字节按小端排序,元组val _ tuple=struct.unpack (4h2i ,a) #如果解析1个数据,那么应该读取与数据存储空间大小一致的字节数,unpack仍然返回元组print(val_tuple) #将元组变成list val _ list=list(val _ tuple)print(val _ list)class bytes 16b \ x00 \ X80 \ x02 \ x00 \ x00 \ xe0 \ X0 \ x00 \ x00 \ x00 \ xb0 \ x04 \ x00 \ xf8 \ x12 \ xf1 (32768,257344,178643200,4044552192) [3768,25732]
# rb是指用open (rd: \ temp \ test.raw , rb )作为f打开文件:# Read 4 bytes a=f . Read(4)# Signed integer b=int . from _ bytes(a,byteorder= little ,Signed=true)print(type(b))16 class int 写数据。在open函数中,使用wb或ab作为打开文件的模式,然后使用struct.pack函数将数据转换为bytes数据并写入。
具体可参考open函数和stuct.unpack函数的描述。
Import struct# rb的意思是用open (rd: \ temp \ test _ wr.raw , WB )作为f: val _ list=[32768,2,57344,1,78643200,444552192] A=struct.pack (4h2i ,* val _ list) #注意,根据pack函数的定义,必须用* print (a) f.write (a) b \ x00 \ x8打开列表
编写单个整数的另一种数据转换方法是使用int.to_bytes函数:
Import struct#使用ab进行open (rd: \ temp \ test _ wr。raw , ab) as f: val=16 #转换为2字节的大端整数A=val。to _ bytes(长度=2,byteorder= big ,signed=false) #
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。