私が見つけた最短の方法は次のとおりです。
n = 5
# Python 2.
s = str(n)
i = int(s)
# Python 3.
s = bytes(str(n), "ascii")
i = int(s)
私は特に、読みやすさと移植性という2つの要素に関心があります。Python 3の2番目の方法は醜いです。ただし、下位互換性があると思います。
私が見逃した短くてきれいな方法はありますか?現在、ラムダ式を作成して新しい関数で修正していますが、おそらくそれは不要です。
回答1:
Python 2またはPython 3で文字列をバイトのシーケンスに変換するには、文字列のencode
メソッドを使用します。エンコーディングパラメータを指定しない場合'ascii'
は、常に数値の桁数に十分対応できるエンコーディングパラメータが使用されます。
s = str(n).encode()
Python 2では、str(n)
すでにバイトが生成されています。encode
この文字列が暗黙的にバイトに再び戻ってUnicodeに変換され、二重の変換を行います。不必要な作業ですが、害はなく、Python 3と完全に互換性があります。
上記は、実際に尋ねられた質問に対する回答です。これは、ASCIIバイトの文字列を人間が読める形式で生成することでした。しかし、人々はここに来て別の質問の答えを得ようとしているので、私もその質問に答えます。変換したい場合は10
するb'10'
上記の解答を使用しますが、変換したい場合10
にはb'\x0a\x00\x00\x00'
、その後読み続けます。
このstruct
モジュールは、さまざまなタイプとそれらのバイナリ表現をバイトのシーケンスとして変換するために特別に提供されました。型からバイトへの変換はで行われstruct.pack
ます。fmt
どの変換を実行するかを決定するフォーマットパラメータがあります。4バイト整数のi
場合はI
、符号付きの数値または符号なしの数値になります。その他の可能性については、フォーマット文字テーブルを参照してください。出力が1バイトを超える場合のオプションについては、バイトオーダー、サイズ、および位置合わせテーブルを参照してください。
import struct
s = struct.pack('<i', 5) # b'\x05\x00\x00\x00'
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加