Python将包含hex的字符串转换为实际的十六进制

时间:2018-01-06 13:21:17

标签: python hex decimal implicit-conversion

我有十六进制字符串,但我需要将其转换为实际 hex 。 例如,我有十六进制字符串

3f4800003f480000

我实现目标的一种方法是使用转义序列:

print("\x3f\x48\x00\x00\x3f\x48\x00\x00")

但是,我不能这样做,因为我想从多个变量中一起创建我的十六进制。

我的程序的 目的 是:

  1. 接受一个例如100
  2. 的数字
  3. 乘以100100 * 100 = 10000
  4. 将其转换为十六进制2710
  5. 添加0000
  6. 再次添加2710
  7. 再次添加0000
  8. 结果我期待的是2710000027100000。现在我需要将这个十六进制数作为参数传递给函数(作为十六进制)。

3 个答案:

答案 0 :(得分:3)

在Python中,没有单独的类型为'hex'。它将数字的十六进制表示法表示为str。您可以通过type将其称为hex()来查看Python's hex document

#         v  convert integer to hex
>>> type(hex(123))
<type 'str'>

但是为了将值表示为十六进制,Python将0x添加到表示十六进制数字的字符串。例如:

>>> hex(123)
'0x7b' 

因此,在您的情况下,为了将您的字符串显示为十六进制等效,您只需要将其作为“0x”前缀:

>>> my_hex = "0x" + "3f4800003f480000"

这种方式如果您可能希望稍后将其转换为其他符号,那么假设整数(基于您的问题陈述的性质,您肯定需要),您只需要请使用 base 16调用int作为:

>>> int("0x3f4800003f480000", base=16)
4559894623774310400

事实上,Python的翻译很聪明。如果你甚至不会在前面添加“0x”,它将会处理它。例如:

>>> int("3f4800003f480000", base=16)
4559894623774310400

“0x”是关于表示字符串是十六进制字符串,以防有人正在查看/调试您的代码(将来),他们会得到这个想法。这就是为什么它是首选的原因。

所以我的建议是坚持使用Python的Hex样式,不要使用转义字符将其转换为“\ x3f \ x48 \ x00 \ x00 \ x3f \ x48 \ x00 \ x00”

来自https://github.com/googlesamples/android-architecture-components

  

将整数转换为带有前缀“0x”的小写十六进制字符串。如果x不是Python int对象,则必须定义一个返回整数的 index ()方法。

答案 1 :(得分:2)

尝试binascii.unhexlify

  

返回由十六进制字符串hexstr。

表示的二进制数据

示例:

assert binascii.unhexlify('3f4800003f480000') == b"\x3f\x48\x00\x00\x3f\x48\x00\x00"

答案 2 :(得分:1)

>>> hex(int('3f4800003f480000', 16))
'0x3f4800003f480000'