在 Python 中转换十六进制字符串为 Int
本教程将演示如何在 Python 中把十六进制字符串转换为 int
。它将涵盖不同的十六进制格式,如有符号的、小写的、大写的、0x
注释的十六进制,以及默认的十六进制字符串。
在 Python 中使用 int()
将十六进制转换为 Int
在 Python 中,将十六进制转换为整数的最常见和最有效的方法是使用类型转换函数 int()
。
这个函数接受两个参数:一个是强制参数,即要转换的值,另一个是可选参数,即数字格式的基数,默认为 10
。
其他的数字格式有 2
代表二进制,8
代表八进制,16
代表十六进制。如果你把 0
作为基础值的参数,它将从值的前缀中得出数字格式。如果没有任何前缀,它将自动识别为十进制,0b
为二进制,0o
为八进制,0x
为十六进制。
在 Python 中把无前缀的十六进制字符串转换为 Int
如果十六进制字符串没有前缀,则指定 int()
函数的基值为 16。
例如:
hex_val = "beef101"
print(int(hex_val, 16))
输出:
200208641
结果是十六进制值 beef101
的十进制或整数转换。
在 Python 中把带前缀的十六进制字符串转换为 Int
如果十六进制字符串有一个前缀 0x
,那么将基值参数改为 0
以自动检测前缀。
你仍然可以传递 16
作为基数,但如果你要处理多个不同格式的数字值,则传递 0
是最好的方法。
hex_val = "0xdeadcab"
print(int(hex_val, 0))
print(int(hex_val, 16))
输出:
233495723
233495723
在 Python 中把小字节序和大字节序十六进制字符串转换为英特值
小字节序和大字节序是十六进制的两种排序系统。默认的排序方式是小 endian,它将最重要的数字放在序列的最右边,而大 endian 则相反。
考虑到这一点,我们要考虑的就是将大尾数的十六进制值转换为小尾数。之后,现在就可以对其进行通常的转换了。
要将一个大尾数十六进制字符串转换为小尾数的十六进制字符串,使用 bytearray.fromhex()
,并对结果使用 reverse()
函数。之后,将十六进制值转换回字符串,并将其转换为整数。
big_endian = "efbe"
def to_little(val):
little_hex = bytearray.fromhex(val)
little_hex.reverse()
print("Byte array format:", little_hex)
str_little = "".join(format(x, "02x") for x in little_hex)
return str_little
little_endian = to_little(big_endian)
print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))
总结一下这段代码。
-
调用
bytearray.fromhex()
将大字节序的十六进制字符串转换成字节数组的十六进制值。 - 将字节数组反转,将大字节序转换成小字节序格式。
- 将字节数组的值反转为小字节序的字符串十六进制格式。
-
使用
int()
将字符串转换为整数。
输出:
Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879
在 Python 中把十六进制转换为有符号的整数
将任何数字格式转换为有符号的整数,都需要一个叫做 Two’s Complement的操作,这是一个针对有符号的数字进行计算的位性数学运算。
所以在我们将十六进制转换成有符号的整数之前,我们需要定义一个函数来执行二进制补码运算。
def twosComplement_hex(hexval):
bits = 16 # Number of bits in a hexadecimal number format
val = int(hexval, bits)
if val & (1 << (bits - 1)):
val -= 1 << bits
return val
二进制值中最左边的位被称为有符号位,决定整数是正数还是负数。这个函数将保留该位作为有符号的位,并通过使用位向左移位运算符 <<
来移位其他位进行补偿。
现在,继续进行十六进制值到有符号 int 的实际转换。
hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"
def twosComplement_hex(hexval):
bits = 16
val = int(hexval, bits)
if val & (1 << (bits - 1)):
val -= 1 << bits
return val
print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))
输出:
255
-1
-21761
现在,我们已经实现了将一个十六进制字符串转换为有符号的整数。
总之,我们已经涵盖了将不同类型的十六进制格式转换为有符号和无符号整数的方法。使用 int()
与值和基数参数一起将十六进制转换为无符号整数。
如果十六进制是大字节序格式,先用 bytearray.fromhex()
和 reverse()
将其转换为小字节序格式。
最后,如果需要将十六进制字符串转换为有符号的整数,那么对其上的十六进制值进行二进制补码运算,得到一个有符号的整数值。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串