python从网络服务反转字节顺序

python从网络服务反转字节顺序,python,networking,Python,Networking,我从网络服务获取以下字节:\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01这些是8位数字。我想将表示形式更改为系统的表示形式(32位),以便能够处理字节。我将如何使用python实现这一点?是否有专门的“反转”功能 向您致意我不知道您所说的8308040460020081150101是什么意思,但是包中应该有您需要的一切。您看过核心库了吗?它有转换字节顺序的方法。确定字节的字节顺序,并提供正确的to结构。unpack如果要反转字符串中的所有字节,可以执行以

我从网络服务获取以下字节:
\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01
这些是8位数字。我想将表示形式更改为系统的表示形式(32位),以便能够处理字节。我将如何使用python实现这一点?是否有专门的“反转”功能


向您致意我不知道您所说的8308040460020081150101是什么意思,但是包中应该有您需要的一切。

您看过核心库了吗?它有转换字节顺序的方法。

确定字节的字节顺序,并提供正确的to
结构。unpack
如果要反转字符串中的所有字节,可以执行以下操作:

'example string'[::-1]

我建议您使用这个模块来解包网络或二进制数据,否则您就没有一个很好的方法来判断需要在哪里进行反向操作。它允许您指定字节顺序。

如果您有8位数字,字节顺序是不相关的,因为每个数字中只有一个字节。如果要将每个字符转换为整数,可以编写:

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

相当于。 如果字符串包含16位或32位整数,则可以编写如下内容:

struct.unpack("!IIHB", "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")
它将被解码为两个4字节、一个2字节和一个1字节的无符号整数。
(相当于big-endian
)意味着字符串是按网络字节顺序排列的,因此所有大于一个字节的整数都可以正确地转换为本机字节顺序


编辑:如果您想要得到11个数字并以相反的顺序处理它们,您应该使用上述方法之一并调用
reversed
,例如:
reversed(map(ord,data))
;但这会颠倒顺序,而不考虑本机字节顺序。你没有说数据到底是什么,我不相信endianness在这里很重要。

这些字节应该如何解释?好的,现在字节都清楚了。现在,您需要说明这些是16位、32位还是64位数字,甚至是其他数字。您想将11个字节分成4个字节的组吗?那怎么行?不,也许我的理解是错的。但我想做的就是把大端点转换成小端点。所以我仍然会有11个字节在结尾,但写下来的另一种方式史蒂夫,如果你有一个1字节的整数列表,endianness是无关的。您可以使用
map(ord,data)
map(ord,reversed(data)将它们转换为无符号整数
,这取决于您是否要将它们向后处理。请参阅我使用
结构的答案,但请注意,向
结构提供
!11b
。解包将不会颠倒字符串中字节的顺序。哦,我修复了初始帖子。我将如何使用它?我尝试了:
打印结构。解包(“!b”,“\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01”)
但似乎不管用。可以简单一点反转字符串:
“mystring”[::-1]
你说得对,没有想到切片(它们非常快)
map(ord, "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")
struct.unpack("!IIHB", "\x83\x08\x04\x04\x60\x02\x00\x81\x15\x01\x01")