Python中将十六进制字符串变量转换为十六进制值

8

我有一个名为hex_string的变量。它的值可能是'01234567'。现在,我想要从这个变量中得到一个16进制值,而不是字符串类型,即0x01234567。这个变量的值可能会发生改变,因此我需要一个通用的转换方法。


这个问题的期望是您有一个十六进制值的ASCII表示,并且您想将十六进制值的ASCII表示转换为实际的十六进制值,但是所选答案假定从字符串转换为不同的值。问题应该真正是如何将Ascii值转换为其十六进制表示(所选答案确实做到了这一点)。具体而言,我期望得到一个结果为0x01234567的十六进制值的解决方案。 - onaclov2000
5个回答

16
我认为您可能混淆了数字与它们的表示。0x0123456719088743是完全一样的东西。"0x01234567""19088743"不是(请注意引号)。
要将十六进制字符的字符串转换为整数,请使用int(value, 16)
要从整数转换为用十六进制表示该数字的字符串,请使用hex(value)
>>> a = 0x01234567
>>> b = 19088743
>>> a == b
True
>>> hex(b)
'0x1234567'
>>> int('01234567', 16)
19088743
>>>

1
这个问题似乎与答案不符,原始问题暗示a =“FF”时的输出应该是print hex(a) >> 0xFF,然而没有一个答案似乎解决了这个问题(包括这个)。 - onaclov2000
抱歉,看起来编辑不好,但基本上将a设置为字符串值FF,然后对其进行十六进制操作,然后打印出来,应该打印0xFF,但通常会导致错误,声称十六进制无法转换该值。 - onaclov2000
@onaclov2000 这个答案想表达的是,不要将值保存为字符串再转换为十六进制,而是将其保存为整数,然后稍后再转换为十六进制! - Ayush Maheshwari

6
>>> int('01234567', 16)
19088743

这与以下内容相同:

>>> 0x01234567
19088743

int('0x01234567',16)也可以正常工作,无需删除0x部分。 - Ashwini Chaudhary
@AshwiniChaudhary 我没有删除任何内容,问题说*该值可以是'01234567'*。 - jamylak

0

我不知道用Python最恰当的方式来完成这个,但以下是我想到的方法。

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

注意:根据我从Python官网的文档中了解到的信息(他们确实显示您可以附加L值),L表示该值属于“long”类别。https://docs.python.org/2/library/functions.html#hex
>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'
>>> hex(1L)
'0x1L'

0
>>> a
'01234567'
>>> hex(int(a))
'0x12d687'
>>> 

希望能有所帮助。

0

十六进制值为<type 'long'>,而十六进制字符串为<type 'str'>。如果将类型从字符串更改为长整型,则可以对十六进制值执行所有操作。

long(hex_string,16)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接