在Python 2.7中使用字节

时间:2015-09-23 13:01:53

标签: python bytearray

我正在尝试在Python中组装一个字节数组,以获得类似于以下内容的签名:

  • 4个字节,表示字符串A的长度(以字节为单位)。
  • 字符串A
  • 4个字节,表示字符串B的长度(以字节为单位)。
  • 字符串B
  • 4个字节,表示Long A值的长度(以字节为单位)。
  • Long A

字符串A + B是utf-8,我使用unicode转换为utf-8(字符串,'utf-8')

我尝试将每个项目转换为字节数组并使用加号例如

连接它们
bytearray(len(a)) + bytearray(a, "utf-8")...

我也使用struct.pack例如

struct.pack("i", len(a)) + bytearray(access_token, "utf-8")...

但似乎没有任何东西可以产生有效的签名。这是在Python中创建上述字节数组的正确方法吗?

1 个答案:

答案 0 :(得分:2)

最后一个问题是关于4字节长度的字节序,但您可以使用struct模块轻松控制它。

我会用

def dopack(A, B, LongA):
    fmt='!'  # for network order, use < for little endian, > for big endian, = for native
    fmt += 'i'

    buf = pack(fmt, len(A))
    buf += A
    buf += pack(fmt, len(B))
    buf += B
    b = bytes(LongA)
    buf += pack(fmt, len(b))
    buf += B

通过这种方式,LongA值以ASCII编码,但更容易,您可以int(b)将其转换回长。