1

b'\x00\x00\x00\x01' の整数値を取得しようとしていますが、これは 1 であると想定しています。

この値「1」を取得するためにいくつかのことを試みましたが、代わりに非常に高い数値が得られました。

これは私が試したものです:

import struct
from struct import *

#I had 4 int values:
byte1 = 0
byte2 = 0
byte3 = 0
byte4 = 1

#I packed each to one byte (seems weird, one int to 1 byte - so is this correct?)
byte1 = struct.pack('b', byte1) #returns b'\x00'
byte2 = struct.pack('b', byte2)
byte3 = struct.pack('b', byte3)
byte4 = struct.pack('b', byte4) #returns b'\x01'

#Now i place all those bytes in one container
con = byte1+byte2+byte3+byte4 #returns b'\x00\x00\x00\x01'

#hmm ..returns 4 - so seems alright?
len(con) 

#tried several things:
struct.unpack('I', con) #unsigned int - returns 16777216 (what!?)
struct.unpack('i', con) #signed int - returns the same as above
unpack('I', con) #same ..

私の質問; 私は何か間違ったことをしていますか?私は何か間違っていることを理解していますか?'(1,)' だけが表示されない理由を誰かに説明してもらえますか?

int 担当者を取得する別の方法がある場合。私にも教えてください。

お読みいただき、ご返信いただきありがとうございます。

4

1 に答える 1

5

結果をリトルエンディアンとして解釈しますが、ビッグエンディアンとして解釈する必要があります。試す

>>> con = b'\x00\x00\x00\x01'
>>> struct.unpack('>i', con)
(1,)

正しいエンディアンを使用するには。

于 2012-04-19T11:54:38.560 に答える