バイトをintに変換しますか?


84

私は現在暗号化/復号化プログラムに取り組んでおり、バイトを整数に変換できる必要があります。そんなこと知ってる:

bytes([3]) = b'\x03'

しかし、私はその逆を行う方法を見つけることができません。私はひどく間違っているのですか?


2
struct複数の変数を一度に変換したい場合のモジュールもあります。
tdelaney 2015年

回答:


131

少なくとも3.2を使用していると仮定すると、これに組み込みがあります

int.from_bytesbytes、byteorder、*、signed = False

..。

引数bytesは、bytes-likeオブジェクトまたは反復可能な生成バイトのいずれかである必要があります。

byteorder引数は、整数を表すために使用されるバイト順序を決定します。バイトオーダーが「大きい」場合、最上位バイトはバイト配列の先頭にあります。バイトオーダーが「小さい」場合、最上位バイトはバイト配列の最後にあります。ホストシステムのネイティブバイトオーダーを要求するには、バイトオーダー値としてsys.byteorderを使用します。

符号付き引数は、2の補数を使用して整数を表すかどうかを示します。


## Examples:
int.from_bytes(b'\x00\x01', "big")                         # 1
int.from_bytes(b'\x00\x01', "little")                      # 256

int.from_bytes(b'\x00\x10', byteorder='little')            # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)  #-1024

ありがとう。間に差があるint.from_bytesord(b'\x03')シングルバイト/文字のためには?
ビル

私は考えることができる唯一の違いは、それがあるint.from_bytes-あなたがそれを言うならば符号付き整数としてバイトを解釈することができますint.from_bytes(b'\xe4', "big", signed=True)しながら、リターン-28ord()またはint.from_bytes符号なしのモードに戻り228で
ピーターDeGlopper

6

バイトのリストはサブスクリプト可能です(少なくともPython 3.6では)。このようにして、各バイトの10進値を個別に取得できます。

>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist)       # b'@x04\x1a\xa3\xff'

>>> for b in bytelist:
...    print(b)                     # 64  4  26  163  255

>>> [b for b in bytelist]           # [64, 4, 26, 163, 255]

>>> bytelist[2]                     # 26 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.