python中使用struct模块处理二进制数据
2011-07-31 17:01
936 查看
假设这样个场景:
你有个文件,里面全是二进制方式存储的整型,你需要读取出来。于是你随手写出了这样的代码:
f = open("file","rb")
#读取个整型
data = f.read(4)
#读取完毕,关了文件
f.close()
#转换
num = int(data) 然后就会报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: null byte in argument for int()
你查看下data:
data = '8\x00:\x00'
神马!!竟然是十六进制!!这货怎么转换?
你翻开《CookBook》 里面扯了一堆不着边用不到的东西,就是没有这个问题。绝望之时,你在文档里看到了struct模块,文档里这么说:
This module performs conversions between Python values and C structs represented as Python strings. It uses format strings (explained below) as compact descriptions of the lay-out of the C structs and the intended conversion to/from Python values. This can be used in handling binary data stored in files or from network connections, among other sources.
没错,找的就是这货!
大概看了下,主要用到的是pack 函数和unpack函数。
pack:
struct.pack(fmt, v1, v2, ...)
Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly. unpack:
struct.unpack(fmt, string)
Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item. The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).
下面还有个对应C语言中数据类型的表格:
怎么样?大概看明白了吧?你把代码改成了:
f = open("file","rb")
data = f.read(4)
#转换格式
num = struct.unpack("i",data)
f.close()
print(num)
这样就正常输出了吧?
嘿嘿,可以早点下班了。
如果还不明白,就接着看文档去,还有可以参考下这篇文章:
http://www.cnblogs.com/tonychopper/archive/2010/07/23/1783501.html
再次赞颂简洁万能的Python。
你有个文件,里面全是二进制方式存储的整型,你需要读取出来。于是你随手写出了这样的代码:
f = open("file","rb")
#读取个整型
data = f.read(4)
#读取完毕,关了文件
f.close()
#转换
num = int(data) 然后就会报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: null byte in argument for int()
你查看下data:
data = '8\x00:\x00'
神马!!竟然是十六进制!!这货怎么转换?
你翻开《CookBook》 里面扯了一堆不着边用不到的东西,就是没有这个问题。绝望之时,你在文档里看到了struct模块,文档里这么说:
This module performs conversions between Python values and C structs represented as Python strings. It uses format strings (explained below) as compact descriptions of the lay-out of the C structs and the intended conversion to/from Python values. This can be used in handling binary data stored in files or from network connections, among other sources.
没错,找的就是这货!
大概看了下,主要用到的是pack 函数和unpack函数。
pack:
struct.pack(fmt, v1, v2, ...)
Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly. unpack:
struct.unpack(fmt, string)
Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item. The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).
下面还有个对应C语言中数据类型的表格:
Format | C Type | Python | Notes |
---|---|---|---|
x | pad byte | no value | |
c | char | string of length 1 | |
b | signed char | integer | |
B | unsigned char | integer | |
? | _Bool | bool | (1) |
h | short | integer | |
H | unsigned short | integer | |
i | int | integer | |
I | unsigned int | integer or long | |
l | long | integer | |
L | unsigned long | long | |
q | long long | long | (2) |
Q | unsigned long long | long | (2) |
f | float | float | |
d | double | float | |
s | char[] | string | |
p | char[] | string | |
P | void * | long |
f = open("file","rb")
data = f.read(4)
#转换格式
num = struct.unpack("i",data)
f.close()
print(num)
这样就正常输出了吧?
嘿嘿,可以早点下班了。
如果还不明白,就接着看文档去,还有可以参考下这篇文章:
http://www.cnblogs.com/tonychopper/archive/2010/07/23/1783501.html
再次赞颂简洁万能的Python。
相关文章推荐
- 【转】python中用struct模块处理二进制数据
- python中用struct模块处理二进制数据(转)
- Python使用struct处理二进制 解析二进制数据 解析socket数据
- python中用struct模块处理二进制数据(转)
- Python中使用struct模块打包二进制数据
- Python使用struct模块转换C语言结构体,打包、解包二进制数据
- Python使用struct处理二进制
- Python使用struct处理二进制(pack和unpack用法)
- Python使用struct处理二进制(pack和unpack用法)
- python 使用struct处理二进制
- Python使用struct处理二进制
- Python模块学习 ---- struct处理二进制
- Python使用struct处理二进制(pack和unpack用法)
- Python使用struct处理二进制(pack和unpack用法)
- Python使用struct处理二进制(pack和unpack用法)
- Python使用struct处理二进制
- Python使用struct处理二进制--pack,unpack
- Python使用struct处理二进制
- Python使用struct处理二进制
- Python使用struct处理二进制