- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 Python 读取二进制文件。文件处于 LSB 模式。我导入结构模块并像这样使用解包:
f=open(sys.argv[1],'rb')
contents= unpack('<I',f.read(4))[0]
print contents
f.close()
文件中的数据在LSB模式下为0XC0000500,实际值为0X000500C0。所以你可以看到 LSB 模式的最小尺寸是每字节。
不过,我用的是Mac机,可能是因为我的gcc或者机器的版本(我不确定。我只是看了http://docs.python.org/library/struct.html关于sizeof和sys.bitorder),结果从上面的代码是X0500C000,所以LSB模式的大小是2Bytes。
我该如何解决这个问题?
无论这个问题是否得到回答,我都会继续挖掘,如果我得到了什么,我会更新。
ps:数据文件是32位机的ELF文件。
pps:由于我要阅读大量的资料,而且这是阅读中的普遍问题,所以手动方式对我来说不是最好的。问题仍然悬而未决。
ppps:< 表示“little-endian,标准大小(16 位)”现在我读到这个...
最佳答案
if the actual value is OXABCD, then the file stores DCBA.
通常字节顺序定义字节的顺序,而不是字节中的各个位。 "\xDC\xBA"
是两个字节(16 位)。如果你交换字节;所有可能的结果是:
>>> "0X%04X" % struct.unpack("<H", binascii.unhexlify("DCBA"))
'0XBADC'
>>> "0X%04X" % struct.unpack(">H", binascii.unhexlify("DCBA"))
'0XDCBA'
这是如何0xabcd
看起来像小/大端格式:
>>> struct.pack('<H', 0xabcd)
'\xcd\xab'
>>> struct.pack('>H', 0xabcd)
'\xab\xcd'
获取0XABCD
来自 "\xDC\xBA"
您需要交换半字节(4 位)。这似乎很不寻常。
Since I am going to read a huge amount of data
你可以使用 array
module一次读取多个值。它使用与 struct
相同的类型格式模块。
< means "little-endian,standard size (16 bit)"
如果您使用 <>
与 struct
模块然后标准尺寸是固定的并且独立于任何东西。 Standard size depends only on the format character .特别是'<H'
总是 2 个字节(16 位),'<I'
始终为 4 个字节(32 位)。只有@
前缀使用原生尺寸。
留在这里让评论有意义
您可以将其读取为 2 个字节的值并手动转换为 int:
>>> hi, lo = struct.unpack("<HH", "\x05\x00\xC0\x00")
>>> n = (hi << 16) | lo
>>> n
327872
>>> "0X%08X" % n
'0X000500C0'
关于python解压小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163549/
我正在尝试在 Raspberry Pi(使用 C 编程)和 Arduino(使用 Arduino IDE)之间发送和接收数据。 根据我在互联网上可以找到的内容,它指出两者都是小端格式。 我在 teun
考虑这段代码: int a=0x10000001; char b; b=(char)a; printf("%#x \n",b); 在我的 PC 上它打印 0x01,我并不感到惊讶。它在 BIG END
我需要你的帮助。我想使用以下代码,因为我正在开发一个音频工具(仅适用于 .wav 文件),其主要功能是显示信号波形。大端和小端是我无法控制的元素。我认为以下代码解决问题的方式是正确的:- 如果音频文件
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个十六进制字符串,其内容为18000000,该字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018。 总而言之,我需要转换180000
我有一个整数列表,比如说 L,它包含一个数字的二进制表示。列表L中的每个整数可以是0或1。“最低有效位”在左边(不是在右边)。 示例:1000001111 代表(十进制)数字 961,或 011101
我有来自实验的Base64 编码数据。所以我想逐步做的是: 从 base64 编码中检索字节(解码) 将字节转换为小端 从 (zlib) 中解压字节 字节数组转 float 组 示例: Dn3LQ3n
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
解码字节时,binary.Read()要求您指定该操作的预期字节顺序。 binary.Read() 还允许您传入结构,但据我所知,它使用相同的字节顺序将字节流解码到结构中的每个字段中。 当编码整数的字
我将 24 位单声道音频 .wav 文件读入 > 7) * 255 data = a.view('
我正在解码一个二进制文件,它有用四个字节表示的十进制数字,小端。例如,94 53 F0 40代表 7.510202。不幸的是,Python 给了我 7.51020240784。 当我尝试使用 unpa
这种传输语法中的数据是如何组织的?来自标准的描述: This Transfer Syntax applies to the encoding of the entire DICOM Data Set.
我是一名优秀的程序员,十分优秀!