【发布时间】:2015-11-05 22:45:47
【问题描述】:
这是我编写的简单 Python(3.4 版)代码,用于从 4 个字节的数组中获取 32 位大小的整数(我假设为 int 类型):
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 对象开销(这几乎肯定没问题......)它没有给你你期望的数字的实际值吗?如果不是,你期望什么与你得到什么? -
此代码嗅探来自另一个 python 程序,我在其中使用 numpy 创建了 4 字节 int 数组。我想要做的是这样的(在 C 中): float f = 1.005;无符号整数 a = *(无符号整数 *)(&f);但是,python 抱怨 numpy 32bit int 无法容纳来自上面代码嗅探的 int。
-
capital I is unsigned 4 byte int ...如果你想要负值,你需要小写i(我认为)
-
如果您想获得 32 位浮点数,为什么不要求
struct给您其中之一呢?
标签: python sockets pack unpack