来自网络服务的python反向字节顺序

时间:2011-07-31 14:59:15

标签: python networking

我从网络服务获得以下字节:\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01这些是8位数。我想将表示更改为我的系统表示(32位),以便能够处理字节。我怎么用python做这个?是否有特殊的“反向”功能?

最好的问候

5 个答案:

答案 0 :(得分:1)

确定字节所在的字节顺序,并将byte order character提供给struct.unpack

答案 1 :(得分:1)

如果要反转字符串中的所有字节,可以执行以下操作:

'example string'[::-1]

我建议使用struct模块来解压缩网络或其他二进制数据,因为否则您无法确切知道需要在何处进行逆转。它允许您指定字节顺序。

答案 2 :(得分:1)

如果您有8位数字,则字节顺序无关紧要,因为每个字节中只有一个字节。如果要将每个字符转换为整数,可以写:

struct.unpack("11B", "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")

struct.unpack("!11B", "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")

map(ord, "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")

它是等价的。 如果string包含16位或32位整数,则可以编写如下内容:

struct.unpack("!IIHB", "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")

将被解码为两个4字节,一个2字节和一个1字节无符号整数。 !(相当于big-endian >)表示字符串是按网络字节顺序排列的,因此大于一个字节的所有整数都可以正确转换为本机字节顺序。

编辑:如果你想要获得11个数字并按相反的顺序处理它们,你应该使用上述方法之一并调用reversed,例如:{{1} };但无论您的本机字节顺序如何,这都会颠倒顺序。你没有说出你的数据是什么,我不相信字节顺序在这里很重要。

答案 3 :(得分:0)

我不确定8308040460020081150101的含义,但struct包应该包含您需要的所有内容。

答案 4 :(得分:0)

您是否查看了核心struct库?它有转换字节顺序的方法。