如何将十六进制字符串转换为十六进制数?

16

我有一个整数,比如16,我想将这个数字转换为十六进制数。我尝试使用hex函数来实现这一点,但是无论何时将整数提供给hex函数,它都返回十六进制数字的字符串表示形式,

my_number = 16
hex_no = hex(my_number)    
print type(hex_no) // It will print type of hex_no as str.

请问如何将以字符串形式表示的十六进制数转换为普通的十六进制数?
谢谢!


6
这有什么关系吗?你只需要将数字转换成十六进制表示法以便打印。一个数字就是一个数字,十进制、二进制和十六进制只是对外展示的不同表示形式。 - Tim Pietzcker
1
奇怪。print hex_no 不应该打印引号。你能再检查一下吗? - Manoj Govindan
1
它并不总是将十六进制表示为字符串,这是一个无意义的问题。在计算机内部,没有所谓的十六进制整数或十进制整数 - 无论如何都是二进制表示。当你将整数转换为其十六进制字符串表示形式(这就是hex的作用)时,当然会得到一个字符串... - The Archetypal Paul
1
不存在所谓的“十六进制数”。存在整数(它们没有任何基数)和整数的字符串表示形式(可以是十六进制、十进制、二进制或其他)。您无法直接在字符串上进行算术运算。因此,将它们转换为整数不是一种“变通方法”,而是正确的做法。 - The Archetypal Paul
嘿,感谢保罗的好课。我发现并意识到十六进制、二进制和八进制只是整数的字符串表示形式。 - Rise
显示剩余12条评论
8个回答

18
>>> print int('0x10', 16)
16

4

示例代码:

print "%x"%int("2a",16)

3
你是否在询问如何将字符串格式的十六进制值“16”转换为整数(即最终得到一个十进制值为22的整数)?从你的问题中并不清楚。如果是这样,你可能想要使用int('16', 16)。

+1. 问题不太清楚。但如果 OP 尝试从十六进制字符串中读取整数,这是一个很好的答案。 - Manoj Govindan
我想从格式化的十六进制字符串中获取十六进制值。例如:'0x16',我希望它是0x16。 - Rise
2
在运行的程序中,0x16 不存在!它可以是'0x16'或者22(=int('0x16', 16))。 - Tim Pietzcker

2
使用字符串格式化程序(先新后旧):
>>> '{:x}'.format( 12345678 )
'bc614e'

>>> '%x' % ( 12345678 )
'bc614e'

1

你的代码对我来说可行,没有添加任何撇号。

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> my_number = 16
>>> hex_no = hex(my_number)
>>> print hex_no
0x10
>>> _

顺便提一下,"十六进制数"并不存在。十六进制只是一种指定数字值的方式。在计算机内存中,该数字值通常以二进制表示,无论在源代码中如何指定(十进制、十六进制等)。
祝好,
- Alf

1
+1. print不会添加引号。也许OP正在输入“hex_no”并按下“回车”键? - Manoj Govindan

1

我认为这里大部分的答案都被误解或者他们理解了问题的错误。

回答你的问题,将十六进制数据的结果字符串表示转换为十六进制数字(整数表示)是不可能的。

因为,当你按照以下方法将一个整数转换为十六进制时

>>> a = hex(34)
>>> print type(a)
<type 'str'>
>>> print a
0x22
>>> a
'0x22'

有些答案在这里被混淆了,

>>> print a
0x22
>>> a
'0x22'

当您在解释器中输入“print a”时,它将输出不带引号的字符串数据。如果您仅输入变量名称而不使用打印语句,则会打印带有单/双引号的字符串数据。
虽然结果值是十六进制数据,但表示形式为字符串
根据Python文档,您无法像我之前说过的那样转换为十六进制数。
谢谢。

0

在MS Windows Vista上使用Python 2.6.5时,命令行解释器的行为如下:

>>>hex(16)
'0x10'
>>>print hex(16)
0x10

我猜这是正常的行为:

>>>'abc'
'abc'
>>>print 'abc'
abc

希望对你有所帮助


-2
def add_hex2(hex1, hex2):
    """add two hexadecimal string values and return as such"""
    return hex(int(hex1, 16) + int(hex2, 16))
print add_hex2('0xff', '0xff')  # 0x1fe

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