您现在的位置:首页 > 教案格式 > 正文

浮点数 非宁静,无以致远(3)

2018-01-03 09:01 网络整理 教案网

浮点数怎么表示_二进制浮点数表示方法_浮点数

二进制方式读写

在Windows和Macintosh环境下,有时可能需要以二进制方式读写文件,比如图片和可执行文件。此时,只要在打开文件的方式参数中增加一个“b”即可:

1. fileHandle = open ( 'testBinary.txt', 'wb' )

2. fileHandle.write ( 'There is no spoon.' )

3. fileHandle.close()

fileHandle = open ( 'testBinary.txt', 'wb' )

fileHandle.write ( 'There is no spoon.' )

fileHandle.close()

1. fileHandle = open ( 'testBinary.txt', 'rb' )

2. print fileHandle.read()

3. fileHandle.close()

fileHandle = open ( 'testBinary.txt', 'rb' )

print fileHandle.read()

fileHandle.close()

python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。

python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是以1个字节为单位的。

import struct

a=12.34

#将a变为二进制

bytes=struct.pack('i',a)

此时bytes就是一个string字符串,字符串按字节同a的二进制存储内容相同。

再进行反操作

现有二进制数据bytes,(其实就是字符串),将它反过来转换成python的数据类型:

a,=struct.unpack('i',bytes)

注意,unpack返回的是tuple

所以如果只有一个变量的话:

bytes=struct.pack('i',a)

那么,解码的时候需要这样

a,=struct.unpack('i',bytes) 或者 (a,)=struct.unpack('i',bytes)

如果直接用a=struct.unpack('i',bytes),那么 a=(12.34,) ,是一个tuple而不是原来的浮点数了。

如果是由多个数据构成的,可以这样:

a='hello'

b='world!'

c=2

d=45.123

bytes=struct.pack('5s6sif',a,b,c,d)

此时的bytes就是二进制形式的数据了,可以直接写入文件比如 binfile.write(bytes)

然后,当我们需要时可以再读出来,bytes=binfile.read()

再通过struct.unpack()解码成python变量

a,b,c,d=struct.unpack('5s6sif',bytes)

'5s6sif'这个叫做fmt,就是格式化字符串,由数字加字符构成,5s表示占5个字符的字符串,2i,表示2个整数等等,下面是可用的字符及类型,ctype表示可以与python中的类型一一对应。

===============================================================================================

各种系统操作

注意:虽然python中提供了各种拼接目录的函数,但是经本人实验,函数并不能保证字符编码不出问题,很大可能导致程序错误。浮点数所以最好还是自己拼接。