web-dev-qa-db-ja.com

intを16進数文字列に変換する方法

私は16進数の文字列表現に整数(それは255以下になります)を取りたい

例:65を渡して'\x41'を出したい、または255を付けて'\xff'を取り出したい.

私はstruct.pack('c',65)を使ってこれをやろうとしました、しかしそれはそれが単一の文字列を取り入れたいので9より上の何でもチョークします。

189
pynoob

あなたはchr関数を探しています。

整数の10進表現と整数の16進表現が混在しているように見えるため、必要なものが完全には明らかになっていません。あなたが与えた説明に基づいて、私はこれらの断片の1つがあなたが欲しいものを示していると思います。

>>> chr(0x65) == '\x65'
True


>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True

これは16進数として整数を含む文字列とはかなり異なることに注意してください。それがあなたが望むものであるなら、hex組み込みを使用してください。

195
Mike Graham

これは整数を0xプレフィックスの付いた2桁の16進数文字列に変換します。

strHex = "0x%0.2X" % 255
127
Greg Bray

hex() はどうですか?

hex(255)  # 0xff

あなたが本当に前に\を持ちたいのなら、あなたはそうすることができます:

print '\\' + hex(255)[1:]
51
Felix Kling

試してください:

"0x%x" % 255 # => 0xff

または

"0x%X" % 255 # => 0xFF

Pythonドキュメントは、「これをあなたの枕の下に置いてください: http://docs.python.org/library/index.html 」と言っています。

41
Dawid

私はこれを加えてみましょう、時々あなたはただ1桁の表現が欲しいからです:

'{:x}'.format(15)
> f

そして今、新しいf''フォーマット文字列であなたがすることができます:

f'{15:x}'
> f

注:f'{15:x}'の最初の 'f'はフォーマット文字列を表します。

25
monkut

255未満の値(1バイトの符号なし、uint8_t)を持つ構造体をパックして、1文字の文字列で終わる場合は、cの代わりに フォーマットBを探しているでしょう Cは文字を文字列に変換します(それ自体はそれほど役に立ちません)が、Bは整数を変換します。

struct.pack('B', 65)

(はい、65は\ x41であり、\ x65ではありません。)

Structクラスは通信や他の用途のためのエンディアンも便利に扱います。

10
XTL

大きな値の場合、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
6
Luc

これは私にとっては最もうまくいった

"0x%02X" % 5  # => 0x05
"0x%02X" % 17 # => 0x11

もっと広い幅の数字が必要な場合は(2)を変更します(2は2つの16進数印刷文字用です)ので、3は次のようになります。

"0x%03X" % 5  # => 0x005
"0x%03X" % 17 # => 0x011
5
shakram02

ランダムな整数を先頭に#を付けて6桁の16進数文字列に変換したいと思いました。これを得るために私は慣れました

"#%6x" % random.randint(0xFFFFFF)
3
ncmathsadist

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'
1
Map
(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'
0

あなたが使用できる代替表現として

[in] '%s' % hex(15)
[out]'0xf'
0
uzumaki