私は16進数の文字列表現に整数(それは255以下になります)を取りたい
例:65
を渡して'\x41'
を出したい、または255
を付けて'\xff'
を取り出したい.
私はstruct.pack('c',
65)
を使ってこれをやろうとしました、しかしそれはそれが単一の文字列を取り入れたいので9
より上の何でもチョークします。
あなたはchr
関数を探しています。
整数の10進表現と整数の16進表現が混在しているように見えるため、必要なものが完全には明らかになっていません。あなたが与えた説明に基づいて、私はこれらの断片の1つがあなたが欲しいものを示していると思います。
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
これは16進数として整数を含む文字列とはかなり異なることに注意してください。それがあなたが望むものであるなら、hex
組み込みを使用してください。
これは整数を0xプレフィックスの付いた2桁の16進数文字列に変換します。
strHex = "0x%0.2X" % 255
試してください:
"0x%x" % 255 # => 0xff
または
"0x%X" % 255 # => 0xFF
Pythonドキュメントは、「これをあなたの枕の下に置いてください: http://docs.python.org/library/index.html 」と言っています。
私はこれを加えてみましょう、時々あなたはただ1桁の表現が欲しいからです:
'{:x}'.format(15)
> f
そして今、新しいf''
フォーマット文字列であなたがすることができます:
f'{15:x}'
> f
注:
f'{15:x}'
の最初の 'f'はフォーマット文字列を表します。
255未満の値(1バイトの符号なし、uint8_t)を持つ構造体をパックして、1文字の文字列で終わる場合は、cの代わりに フォーマットBを探しているでしょう Cは文字を文字列に変換します(それ自体はそれほど役に立ちません)が、Bは整数を変換します。
struct.pack('B', 65)
(はい、65は\ x41であり、\ x65ではありません。)
Structクラスは通信や他の用途のためのエンディアンも便利に扱います。
大きな値の場合、hex()
はまだ機能します(他のいくつかの答えでは機能しません)。
x = hex(349593196107334030177678842158399357)
print(x)
Python 2:0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d
復号化されたRSAメッセージの場合、次のことが可能です。
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
これは私にとっては最もうまくいった
"0x%02X" % 5 # => 0x05
"0x%02X" % 17 # => 0x11
もっと広い幅の数字が必要な場合は(2)を変更します(2は2つの16進数印刷文字用です)ので、3は次のようになります。
"0x%03X" % 5 # => 0x005
"0x%03X" % 17 # => 0x011
ランダムな整数を先頭に#を付けて6桁の16進数文字列に変換したいと思いました。これを得るために私は慣れました
"#%6x" % random.randint(0xFFFFFF)
format()
を使うと、 format-examples に従って、次のことができます。
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
例えば:
>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
あなたが使用できる代替表現として
[in] '%s' % hex(15)
[out]'0xf'