int.to_bytes()の一貫性のない動作
Nov 29 2020
私が書くとき:
expint = 34614
expint = expint.to_bytes(2,'big')
b '\ x87 \ x36'ではなくexpint = b '\ x876'の値を取得します(3が欠落しており、形式が間違っているようです)。ただし、expint = 65418で同じことを試したところ、正しい結果b '\ xff \ x8a'が得られました。これは、私が使用しているインタプリタまたは他のツールのバグである可能性がありますか?Visual Studio2017でPython3.7を使用しています。
回答
2 KarlKnechtel Nov 29 2020 at 20:32
これはint.to_bytes()
、とは何の関係もなく、すべてがbytes
型自体と関係があります。
b '\ x87 \ x36'の代わりにexpint = b '\ x876'の値を取得します
b'\x876'
とb'\x87\x36'
は同じものであるため、この苦情は意味がありません。
>>> b'\x87\x36'
b'\x876'
>>> b'\x87\x36' == b'\x876'
True
bytes
オブジェクトの表現はありません単に進ダンプ。バイト文字列の文法では、歴史的な理由から、他の多くのオプションを使用できます(つまり、2.xでは、テキストを表すことができるふりをしていたため)。正規表現(つまり、print
インスタンスのときにPythonによって生成される表現)は\x
、最後の手段としてスタイルエスケープのみを使用します。
ASCIIでは、値を持つバイト0x36
はシンボルにマップされます6
。(繰り返しますが、以前はこの方法でテキストを表現できるふりをしていました。英語と少数のヨーロッパ言語のみを処理する必要があり、いつでも処理するヨーロッパ言語を選択できる場合は、並べ替えることができます。 -それも避けてください。)