是否可以在不给出长度的情况下将“字符串”转换为“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()
我试着做同样但长度未知的事情。 非常感谢!
答案 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()