好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python使用struct处理二进制的方法详解

这篇文章主要介绍了Python使用struct处理二进制的实例详解的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下

struct Header
{
  unsigned short id;
  char[4] tag;
  unsigned int version;
  unsigned int count;
} 
import struct
a=12.34
#将a变为二进制
bytes=struct.pack('i',a) 
a='hello'
b='world!'
c=2
d=45.123
bytes=struct.pack('5s6sif',a,b,c,d) 
binfile=open(filepath,'rb')  读二进制文件

binfile=open(filepath,'wb')  写二进制文件 

那么和binfile=open(filepath,'r')的结果到底有何不同呢?

不同之处有两个地方:

第一,使用'r'的时候如果碰到'0x1A',就会视为文件结束,这就是EOF。使用'rb'则不存在这个问题。即,如果你用二进制写入再用文本读出的话,如果其中存在'0X1A',就只会读出文件的一部分。使用'rb'的时候会一直读到文件末尾。

第二,对于字符串x='abc\ndef',我们可用len(x)得到它的长度为7,\n我们称之为换行符,实际上是'0X0A'。当我们用'w'即文本方式写的时候,在windows平台上会自动将'0X0A'变成两个字符'0X0D','0X0A',即文件长度实际上变成8.。当用'r'文本方式读取时,又自动的转换成原来的换行符。如果换成'wb'二进制方式来写的话,则会保持一个字符不变,读取时也是原样读取。所以如果用文本方式写入,用二进制方式读取的话,就要考虑这多出的一个字节了。'0X0D'又称回车符。linux下不会变。因为linux只使用'0X0A'来表示换行。

以上就是Python使用struct处理二进制的方法详解的详细内容,更多请关注Gxl网其它相关文章!

查看更多关于Python使用struct处理二进制的方法详解的详细内容...

  阅读:43次