Python结构字符串到bin

时间:2015-12-01 20:37:48

标签: python struct binary

我正在学习Python。 看到模块结构,我发现了一个疑问:

是否可以在不给出长度的情况下将“字符串”转换为“bin”。

对于案例(有字符长度)

F = open("data.bin", "wb")

import struct
data = struct.pack("24s",b"This is an unknown string")
print(data)

F.write(data)

F.close()

我试着做同样但长度未知的事情。 非常感谢!

3 个答案:

答案 0 :(得分:1)

如果您有字符串,请使用len来确定字符串的长度。

data = struct.pack("{0}s".format(len(unknown_string)), unknown_string)

答案 1 :(得分:0)

Bytes类型是二进制数据类型,它只存储一堆8位字符。请注意,带有struct.pack的代码最终会创建一个bytes对象:

>>> import struct
>>> data = struct.pack("24s",b"This is an unknown string")
>>> type(data)
<class 'bytes'>
>>> len(data)
24

根据您的格式说明符,此长度为24。如果你只想将bytes-string直接放入文件而不进行任何长度检查,你甚至不需要使用struct模块,你可以直接将它写入文件:

F = open("data.bin", "wb")
F.write(b"This will work")

如果你想保持24个字节的长度,你可以继续使用struct.pack

>>> data = struct.pack("24s",b"This is an unknown st")
>>> len(data)
24
>>> print(data)
b'This is an unknown st\x00\x00\x00'
>>> data = struct.pack("24s",b"This is an unknown string abcdef")
>>> print(data)
b'This is an unknown strin'

在提供太短的字节struct.pack的情况下,用0填充余数,如果它太长则截断它。

如果你不介意用零填充缺少的空格,你可以直接将bytes对象传递给struct.pack,它将处理它。

答案 2 :(得分:0)

感谢两者...... 我的新代码:

F = open("data.bin", "wb")

strs = b"This is an unkown string"

import struct
data = struct.pack("{0}s".format(len(strs)),strs)
print(data)

F.write(data)

F.close()