在int数组或元组与字节之间正确转换

时间:2018-08-15 20:26:08

标签: python-3.x python-2.7 int tuples bytestring

嗨,我有以下代码可以在int数组和字节类型变量之间进行转换:

def BYTES_INTARRAY(x):
    data_ints = struct.unpack('<' + 'B'*len(x), x)
    return data_ints

def INTARRAY_BYTES(x):
    data_bytes = struct.pack('<' + 'B'*len(x), *x)
    return data_bytes

对于长度大于1的字节,它似乎工作得很好,但是当只有1个字节时,它给出了一个奇怪的结果。

例如:

print(        INTARRAY_BYTES([255,25])              )

返回:b'\xff\x19'

然后反馈:

print(        BYTES_INTARRAY(b'\xff\x19')              )

返回: (255, 25)

但是如果只有1个字节:

print(        INTARRAY_BYTES([255])              )

返回:b'\xff'

并反馈:

print(        BYTES_INTARRAY(b'\xff')              )

返回:(255,)

问题:

1)255之后的,到底是什么。我不明白在数字后加逗号和空逗号的语法。

2)这段代码是针对python 2.x的,是否有更有效的方法针对python 3.x?

1 个答案:

答案 0 :(得分:0)

bytes可以直接从整数的可迭代对象中创建:

bytes([255, 25])
# b'\xff\x19'

并遍历bytes会产生整数

tuple(b'\xff\x19')
# (255, 25)