8

入力='FFFF'#4 ASCII F

望ましい結果...-1を整数として

試したコード:

hexstring = 'FFFF'
result = (int(hexstring,16))
print result #65535

結果:65535

私が試したことは、「FFFF」が負の数の表現であることを認識していないようです。

4

2 に答える 2

10

Pythonは、「額面値」のFFFFを10進数の65535に変換します

input = 'FFFF'
val = int(input,16) # is 65535

16ビットの符号付き数値として解釈する必要があります。以下のコードは、任意の数値の下位16ビットを取り、「sign-extend」、つまり16ビットの符号付き値として解釈し、対応する整数を提供します。

val16 = ((val+0x8000)&0xFFFF) - 0x8000

これは簡単に一般化できます

def sxtn( x, bits ):
     h= 1<<(bits-1)
     m = (1<<bits)-1
     return ((x+h) & m)-h
于 2012-12-22T15:21:30.470 に答える
2

Cのような言語では、「FFFF」は符号付き(-1)または符号なし(65535)の値として解釈できます。Pythonの構造体モジュールを使用して、必要な解釈を強制することができます。

以下のコードは処理を試みないエンディアンの問題が存在する可能性があり、16ビットを超えるデータを処理しないため、これらのいずれかのケースが有効である場合は適応する必要があることに注意してください。 。

import struct

input = 'FFFF'

# first, convert to an integer. Python's going to treat it as an unsigned value.
unsignedVal = int(input, 16)
assert(65535 == unsignedVal)
# pack that value into a format that the struct module can work with, as an 
# unsigned short integer
packed = struct.pack('H', unsignedVal)
assert('\xff\xff' == packed)

# ..then UNpack it as a signed short integer
signedVal = struct.unpack('h', packed)[0]
assert(-1 == signedVal)
于 2012-12-22T14:00:26.167 に答える