ヘッダー
Python サンプル集
 

bytearrayを数値にする

2022/11/6

→ C# のサンプルに切り替える → Visual Basic のサンプルに切り替える

 

b'\x87\xd6\x12\x00' を 数値 1234567 にする。(リトルエンディアン)

bins = b'\x87\xd6\x12\x00'

number = int.from_bytes(bins, 'little') #←この書き方だと正の数値しか扱えません。
#number = int.from_bytes(bins, 'little', signed=True) #bins の上位1ビットを符号として扱う場合。(この場合、負の数値も扱えます。)

print(number) #1234567

メモ:符号なしの数値(つまり、正の値しかありえない数値)は全ビットで値を表しますが、符号付きの数値は上位1ビットでプラスorマイナスを表し、残りの部分で値を表します。bytearrayを数値に変換するときに、上位1ビットが値なのか符号なのか自動的に判断することができません。デフォルトでは値として扱います。符号として扱う場合は引数 signed に True を設定してプログラム上明示するする必要があります。たとえば、b'y)\xed\xff' を 符号なしと解釈して数値化すると 4293732729 になりますが、上位1バイトが符号だと解釈すると -1234567 になります。 (参考:2の補数)

 

 

b'\x87\xd6\x12\x00\x00\x00\x00\x00' を 数値 1234567 にする。(リトルエンディアン)

bins = b'\x87\xd6\x12\x00\x00\x00\x00\x00'

number = int.from_bytes(bins, 'little') #←この書き方だと正の数値しか扱えません。
#number = int.from_bytes(bins, 'little', signed=True) #bins の上位1ビットを符号として扱う場合。(この場合、負の数値も扱えます。)

print(number) #1234567

メモ:符号なしの数値(つまり、正の値しかありえない数値)は全ビットで値を表しますが、符号付きの数値は上位1ビットでプラスorマイナスを表し、残りの部分で値を表します。bytearrayを数値に変換するときに、上位1ビットが値なのか符号なのか自動的に判断することができません。デフォルトでは値として扱います。符号として扱う場合は引数 signed に True を設定してプログラム上明示するする必要があります。たとえば、b'y)\xed\xff\xff\xff\xff\xff' を 符号なしと解釈して数値化すると 18446744073708317049 になりますが、上位1バイトが符号だと解釈すると -1234567 になります。 (参考:2の補数)

 

 

b'\x00\x12\xd6\x87' を 数値 1234567 にする。(ビッグンディアン)

bins = b'\x00\x12\xd6\x87'

number = int.from_bytes(bins, 'big') #←この書き方だと正の数値しか扱えません。
#number = int.from_bytes(bins, 'big', signed=True) #bins の上位1ビットを符号として扱う場合。(この場合、負の数値も扱えます。)

print(number) #1234567

メモ:符号なしの数値(つまり、正の値しかありえない数値)は全ビットで値を表しますが、符号付きの数値は上位1ビットでプラスorマイナスを表し、残りの部分で値を表します。bytearrayを数値に変換するときに、上位1ビットが値なのか符号なのか自動的に判断することができません。デフォルトでは値として扱います。符号として扱う場合は引数 signed に True を設定してプログラム上明示するする必要があります。たとえば、ビッグエンディアンの場合、b'\xff\xed)y' を 符号なしと解釈して数値化すると 4293732729 になりますが、上位1バイトが符号だと解釈すると -1234567 になります。 (参考:2の補数)

 

 

b'\x00\x00\x00\x00\x00\x12\xd6\x87' を 数値 1234567 にする。(ビッグエンディアン)

bins = b'\x00\x00\x00\x00\x00\x12\xd6\x87'

number = int.from_bytes(bins, 'big') #←この書き方だと正の数値しか扱えません。
#number = int.from_bytes(bins, 'big', signed=True) #bins の上位1ビットを符号として扱う場合。(この場合、負の数値も扱えます。)

print(number) #1234567

メモ:符号なしの数値(つまり、正の値しかありえない数値)は全ビットで値を表しますが、符号付きの数値は上位1ビットでプラスorマイナスを表し、残りの部分で値を表します。bytearrayを数値に変換するときに、上位1ビットが値なのか符号なのか自動的に判断することができません。デフォルトでは値として扱います。符号として扱う場合は引数 signed に True を設定してプログラム上明示するする必要があります。たとえば、ビッグエンディアンの場合、b'\xff\xff\xff\xff\xff\xed)y' を 符号なしと解釈して数値化すると 18446744073708317049 になりますが、上位1バイトが符号だと解釈すると -1234567 になります。 (参考:2の補数)