ホームページ  >  記事  >  バックエンド開発  >  「bytes(n)」が「n」のバイナリ形式を表さないのはなぜですか?

「bytes(n)」が「n」のバイナリ形式を表さないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-20 14:54:02616ブラウズ

Why Doesn't

なぜ「bytes(n)」はバイナリを表さないのですか?

Python 3 の「bytes(n)」関数は長さ 'n のバイト文字列を生成します' 整数 'n' をバイナリ表現に変換するのではなく、null バイトで埋められます。この予期しない動作は、Python 3.2 で導入された変更にルーツがあります。

'to_bytes' メソッド

整数をバイナリ表現に変換するには、Python 3.2 で導入された 'to_bytes' メソッドを使用できます。 Python3.2。次の例は、その使用法を示しています。

<code class="python">>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'</code>

または、整数からバイトへの変換を処理する独自の関数を実装することもできます。

<code class="python">def int_to_bytes(x: int) -> bytes:
    return x.to_bytes((x.bit_length() + 7) // 8, 'big')

def int_from_bytes(xbytes: bytes) -> int:
    return int.from_bytes(xbytes, 'big')</code>

Signed Integers

「to_bytes」メソッドは、符号なし整数の変換のみをサポートします。符号付き整数の場合、ビット長の計算はより複雑になります:

<code class="python">def int_to_bytes(number: int) -> bytes:
    return number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True)

def int_from_bytes(binary_data: bytes) -> Optional[int]:
    return int.from_bytes(binary_data, byteorder='big', signed=True)</code>

以上が「bytes(n)」が「n」のバイナリ形式を表さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。