我正在尝试从编码文件中解压缩特定数据。数据类型为int32。
我的方法是尝试读取文件的每一行,如果该行的一部分大小与'
with open(r2sFile2, encoding="latin-1") as datafile:
for line in datafile:
for i in range(0, len(line)):
text = line.encode('latin-1')
fmt = text[0: i+1]
print(sys.getsizeof(fmt))
if (sys.getsizeof(fmt) == 4):
PacketSize = struct.unpack('<I', fmt)
if PacketSize == 'BTH0':
print("Identifier Found")
到目前为止,我遇到了一个问题,第一个是sys.getsizeof(fmt)[读取线段的大小]返回的值始终高于所需的大小[4]。也许我必须将每个字节对象转换为int32(如果可能的话)?
答案 0 :(得分:0)
您无法使用编码打开文件,也无法从同一个流中读取原始字节。指定编码会将这些字节转换为unicode点。您希望以二进制模式打开文件,以便它返回byte
而不是unicode
个字符。您还应该从文件中读取固定大小的数据块,而不是逐行读取,这在二进制模式下确实没有意义
with open('/path/to/file.dat', 'rb') as f:
val = struct.unpack('<I', f.read(4))
if val == 123:
...
此外,&#39; BTH0&#39;不是无符号整数,所以它永远不会与二进制文件中解压缩的值相等,格式为字符串<I
,它始终是无符号整数。