下面是一个简单的Python(版本3.4)代码我已经写得到一个32位大小的整数(INT型我假设)从4个字节的数组:Python:如何从一个4字节的字节数组中获取一个4字节大小的整数?
import binascii
import socket
import struct
import array
import pickle
import ctypes
import numpy
import sys
float_val = 1.0 + 0.005
print(float_val)
packed = struct.pack('f', float_val)
print(len(packed))
tempint2 = struct.unpack(">I", packed)[0]
tempint3 = struct.unpack_from(">I", packed)[0]
tempint4 = int.from_bytes(packed, byteorder='big', signed=False)
print(sys.getsizeof(tempint2))
print(tempint2)
print(sys.getsizeof(tempint3))
print(tempint3)
print(sys.getsizeof(tempint4))
print(tempint4)
然而,没有尝试( tempint2/tempint3/tempint4)给出了我期望的值(4字节大小的整数)。不知何故,大小都是18个字节(sys.getsizeof()函数的结果)。你能告诉我如何得到预期的答案(4字节或32位大小的整数)?
'sys.getsizeof()'包含python对象的开销......你可以使用numpy来创建一个实际的4字节整数的数组......或者只是处理这个事实,即4个字节的数字数据和12个字节的python对象开销(这几乎肯定没问题......)它是不是给了你期望的实际数值?如果不是你期望的是什么,你会得到什么? –
此代码sniffet来自另一个python程序,我使用numpy创建了4字节的int数组。我想要做的就是这样(在C中):float f = 1.005; unsigned int a = *(unsigned int *)(&f);)然而,python抱怨numpy 32位int无法容纳来自上面的代码sniffet的int int –
大写字母I是无符号4字节int ...如果你想要负值将需要小写我(我认为) –