gpt4 book ai didi

python - 如何将庞大的二进制数据转换成ASCII格式?

转载 作者:行者123 更新时间:2023-11-28 22:33:21 28 4
gpt4 key购买 nike

我想读取一个包含大量二进制数据的文件。我想将这个二进制数据转换成 ASCII 格式。在开始的时候,我想读取 2 个字节,它表示消息的大小,消息是超前的。阅读完这整条消息后,再次重复相同的操作,消息大小为 2 个字节,然后是实际消息。

打印输入数据的代码-

with open("abc.dat", "rb") as f:
byte = f.read(1)
i = 0
while byte:
i += 1
print byte+' ',
byte = f.read(1)
if i is 80:
sys.exit()

输入数据(80字节)-

  O  T  C  _  A  _  R  C  V  R                                                            P  V  �  W          �  w              /  �              �  �  '            �  �  &  �  

编辑1- . >使用 hexdump -n200 otc_a_primary_1003_0600.dat 命令输出-

0000000 4f03 4354 415f 525f 5643 0052 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 5650 57f2 0000 0000
0000030 77d1 0002 0000 0000 902f 0004 0000 0000
0000040 a2bd 1027 0000 0000 d695 e826 2e0b 3e11
0000050 aa55 0300 f332 0000 0046 0000 0000 0000
0000060 5650 57f2 0000 0000 22f8 0a6c 0000 0000
0000070 3030 3030 3730 3435 5135 0000 0000 0100
0000080 bdb4 0100 3000 5131 5a45 1420 077a 9c11
0000090 3591 1416 077a 9c11 dc8d 00c0 0000 0000
00000a0 0000 4300 5241 2020 7f0c 0700 ed0d 0700
00000b0 2052 2020 2030 aa55 0300 f332 0000 0046
00000c0 0000 0000 0000 5650
00000c8

我正在使用 python 的 struct模块。 python版本-python 2.7.6

程序代码-

import struct

msg_len = struct.unpack('h', f.read(2))[0]
msg_data = struct.unpack_from('s', f.read(msg_len))[0]
print msg_data

但我看不到实际消息,只有单个字符在控制台上打印。我如何以适当的方式读取此类二进制文件的消息?

最佳答案

这取决于你的两个字节长度是如何存储在数据中的,例如,如果你的文件的前两个字节(十六进制)是 00 01 这是否意味着下面的消息是 1 字节长还是 256 字节长?这称为大端格式或小端格式。尝试以下两种方法,一种应该给出更有意义的结果,它旨在读取消息长度 block 中的数据:

大端格式

import struct

with open('test.bin', 'rb') as f_input:
length = f_input.read(2)

while len(length) == 2:
print f_input.read(struct.unpack(">H", length)[0])
length = f_input.read(2)

小端格式

import struct

with open('test.bin', 'rb') as f_input:
length = f_input.read(2)

while len(length) == 2:
print f_input.read(struct.unpack("<H", length)[0])
length = f_input.read(2)

实际数据需要进一步处理。 H 告诉结构将 2 个字节作为 unsigned short 处理(即永远不能将值视为负值)。

另外需要考虑的是,有时长度包括它本身,因此长度为 2 可能意味着一条空消息。

关于python - 如何将庞大的二进制数据转换成ASCII格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39994357/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com