下面是一個簡單的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 ...如果你想要負值將需要小寫我(我認爲) –