- 论坛徽章:
- 1
|
我想得到32位整数中得到4个byte,例如0x11223344,得到0x11, 0x22, 0x33, 0x44
我想到两个方法,一个是用struct,
struct.unpack('BBBB', struct.pack('I', int32))
还有一个是直接用位运算
byte[0] = int32 & 0x000000ff
byte[1] = (int32 & 0x0000ff00) >> 8
byte[2] = (int32 & 0x00ff0000) >> 16
byte[3] = (int32 & 0xff000000) >> 24
直接用位运算更快一点,但是代码冗长。
有什么更好的方法吗?python里有没有,类似C里面union这样的东东?
#!/usr/bin/env python
import struct
import time
int32 = 0x01020304
MAX_LOOP = 1000000
start = time.clock()
for i in range(0, MAX_LOOP):
byte = struct.unpack('BBBB', struct.pack('I', int32))
print time.clock() - start, byte
del byte
byte = [0, 0, 0, 0]
start = time.clock()
for i in range(0, MAX_LOOP):
byte[0] = int32 & 0x000000ff
byte[1] = (int32 & 0x0000ff00) >> 8
byte[2] = (int32 & 0x00ff0000) >> 16
byte[3] = (int32 & 0xff000000) >> 24
print time.clock() - start, byte |
运行结果:
3.1398901257 (4, 3, 2, 1)
2.2289061878 [4, 3, 2, 1L] |
|