在 python 2.7 中将 8 位转换为字节数组
Convert 8 bits to byte array in python 2.7
我将 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
所以现在我的主要问题是将这些位再次转换为字节数组。而已!
有帮助吗?谢谢!
如果使用了无符号字符,您可以简单地使用 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])
我将 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
所以现在我的主要问题是将这些位再次转换为字节数组。而已! 有帮助吗?谢谢!
如果使用了无符号字符,您可以简单地使用 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])