Python - 十进制到十六进制,反向字节顺序,十六进制到十进制

时间:2011-05-13 17:50:11

标签: python decimal hex bit

我一直在读stuct.pack和hex之类的东西。

我正在尝试将小数转换为带有2个字节的十六进制。反转十六进制位顺序,然后将其转换回十进制。

我正在尝试按照这些步骤...在python中

Convert the decimal value **36895** to the equivalent 2-byte hexadecimal value:

**0x901F**
Reverse the order of the 2 hexadecimal bytes:

**0x1F90**
Convert the resulting 2-byte hexadecimal value to its decimal equivalent:

**8080**

5 个答案:

答案 0 :(得分:7)

>>> x = 36895
>>> ((x << 8) | (x >> 8)) & 0xFFFF
8080
>>> hex(x)
'0x901f'
>>> struct.unpack('<H',struct.pack('>H',x))[0]
8080
>>> hex(8080)
'0x1f90'

答案 1 :(得分:1)

要从十进制转换为十六进制,请使用:

dec = 255
print hex(dec)[2:-1]

这将输出255的十六进制值。 要转换回十进制,请使用

hex = 1F90
print int(hex, 16)

那将输出1F90的十进制值。

你应该能够使用以下方法来反转字节:

hex = "901F"
hexbyte1 = hex[0] + hex[1]
hexbyte2 = hex[2] + hex[3]
newhex = hexbyte2 + hexbyte1
print newhex

这将输出1F90。希望这有帮助!

答案 2 :(得分:1)

请记住,'hex'(基数16 0-9和a-f)和'decimal'(0-9)只是人类表示数字的结构。这是机器的全部内容。

python hex(int)函数生成一个十六进制'string'。如果要将其转换回十进制:

>>> x = 36895
>>> s = hex(x)
>>> s
'0x901f'
>>> int(s, 16)  # interpret s as a base-16 number

答案 3 :(得分:0)

打印格式也适用于字符串。

# Get the hex digits, without the leading '0x'
hex_str = '%04X' % (36895)

# Reverse the bytes using string slices.
# hex_str[2:4] is, oddly, characters 2 to 3.
# hex_str[0:2] is characters 0 to 1.
str_to_convert = hex_str[2:4] + hex_str[0:2]

# Read back the number in base 16 (hex)
reversed = int(str_to_convert, 16)

print(reversed) # 8080!

答案 4 :(得分:0)

我的方法

import binascii

n = 36895
reversed_hex = format(n, 'x').decode('hex')[::-1]
h = binascii.hexlify(reversed_hex)
print int(h, 16)

或一行

print int(hex(36895)[2:].decode('hex')[::-1].encode('hex'), 16)
print int(format(36895, 'x').decode('hex')[::-1].encode('hex'), 16)
print int(binascii.hexlify(format(36895, 'x').decode('hex')[::-1]), 16)

或使用bytearray

import binascii

n = 36895
b = bytearray.fromhex(format(n, 'x'))
b.reverse()
print int(binascii.hexlify(b), 16)