負の整数 (4 バイト) があり、その 2 の補数表現の 16 進形式が必要です。
>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'
でも「FF…」が見たい。
負の整数 (4 バイト) があり、その 2 の補数表現の 16 進形式が必要です。
>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'
でも「FF…」が見たい。
方法は次のとおりです(16ビット数値の場合):
>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'
(しかし、最もエレガントな方法ではないかもしれません)
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
ビット文字列モジュールの使用:
>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'
単純
>>> hex((-4) & 0xFF)
'0xfc'
このstruct
モジュールは、Python 値と Python バイト オブジェクトとして表される C 構造体との間の変換を実行します。パックされたバイト オブジェクトは、個々のバイト値へのアクセスを提供します。これは、基になる (C) 整数表現を表示するために使用できます。
>>> packed = struct.pack('>i',i) # big-endian integer
>>> type(packed)
<class 'bytes'>
>>> packed
b'\xff\xfb;\xd1'
>>> "%X%X%X%X" % tuple(packed)
'FFFB3BD1'
>>>