在python 2.7中将8位转换为字节数组

时间:2015-10-12 11:30:06

标签: python struct bytearray

我将long转换为字节数组,并从每个字节中提取出8位。

以下是代码段: -

import array
import struct
t = 1447460000
t = long(t)
store = struct.pack('!q', t)
byteArray = array.array('b', store)
print byteArray 

我得到的输出是: -

array('b', [0, 0, 0, 0, 86, 70, 124, -96])

现在编写代码来获取位: -

for bi in byteArray:
    actualValue = '{0:08b}'.format(bi)
    print actualValue 

我得到的输出是正确的: -

00000000
00000000
00000000
00000000
01010110
01000110
01111100
-1000100

现在我通过将最后8位替换为1来更改此输出,并替换0的买1和其他方式手动。 所以它变成: -

11111111
11111111
11111111
11111111
10101001
10111001
10000011
10111011

所以现在我的主要问题是将这些位再次转换为字节数组。而已! 有什么帮助吗?谢谢!

1 个答案:

答案 0 :(得分:1)

如果使用了无符号字符,您只需使用XOR运算符转换值即可。当应用0xFF时,它将具有反转所有位的效果。

import array
import struct
t = 1447460000
t = long(t)
store = struct.pack('!q', t)
byteArray = array.array('B', store)

print byteArray
print

for index, value in enumerate(byteArray):
    byteArray[index] = value ^ 0xFF         # XOR
    print '{:08b} -> {:08b}'.format(value, byteArray[index])

print
print byteArray

这会给你以下输出:

array('B', [0, 0, 0, 0, 86, 70, 124, 160])

00000000 -> 11111111
00000000 -> 11111111
00000000 -> 11111111
00000000 -> 11111111
01010110 -> 10101001
01000110 -> 10111001
01111100 -> 10000011
10100000 -> 01011111

array('B', [255, 255, 255, 255, 169, 185, 131, 95])