8

我有一个变量调用 hex_string。该值可以是“01234567”。现在我想从这个变量中获取一个十六进制值,它是 0x01234567 而不是字符串类型。这个变量的值可能会改变。所以我需要一个通用的转换方法。

4

5 回答 5

15

我认为您可能混淆了数字及其表示。0x01234567并且19088743是完全相同的东西。"0x01234567""19088743"不是(注意引号)。

要从十六进制字符串转换为整数,请使用int(value, 16).

要从整数转换为以十六进制表示该数字的字符串,请使用hex(value).

>>> a = 0x01234567
>>> b = 19088743
>>> a == b
True
>>> hex(b)
'0x1234567'
>>> int('01234567', 16)
19088743
>>>
于 2013-06-20T06:41:17.737 回答
6
>>> int('01234567', 16)
19088743

这与以下内容相同:

>>> 0x01234567
19088743
于 2013-06-20T06:37:49.453 回答
0
>>> a
'01234567'
>>> hex(int(a))
'0x12d687'
>>> 

希望能帮助到你..

于 2013-06-20T06:39:22.497 回答
0

我不知道正确的“pythonic”方式来做到这一点,但这就是我想出的。

def hex_string_to_bin_string(input):
   lookup = {"0" : "0000", "1" : "0001", "2" : "0010", "3" : "0011", "4" : "0100", "5" : "0101", "6" : "0110", "7" : "0111", "8" : "1000", "9" : "1001", "A" : "1010", "B" : "1011", "C" : "1100", "D" : "1101", "E" : "1110", "F" : "1111"}
   result = ""
   for byte in input:
      result =  result + lookup[byte]
   return result
def hex_string_to_hex_value(input):
   value = hex_string_to_bin_string(input)
   highest_order = len(value) - 1
   result = 0
   for bit in value:
      result = result + int(bit) * pow(2,highest_order)
      highest_order = highest_order - 1
   return hex(result)
print hex_string_to_hex_value("FF")

结果是

0xff

还尝试打印 hex_string_to_hex_value("01234567")

结果是

0x1234567L

注意: L 表示该值属于“长”类别,据我所知,根据 python 网站的文档(它们确实表明您可以附加 L 值)。 https://docs.python.org/2/library/functions.html#hex

>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'
>>> hex(1L)
'0x1L'
于 2015-04-03T13:53:15.940 回答
0

十六进制值是<type 'long'>,而十六进制字符串是<type 'str'>。如果类型从 str 更改为 long,则对 hex 值的所有操作都是可行的。

long(hex_string,16)
于 2016-07-25T08:36:06.803 回答