迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 中转换十六进制字符串为 Int

作者:迹忆客 最近更新:2023/12/21 浏览次数:

本教程将演示如何在 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() 将其转换为小字节序格式。

最后,如果需要将十六进制字符串转换为有符号的整数,那么对其上的十六进制值进行二进制补码运算,得到一个有符号的整数值。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中比较两个日期

发布时间:2023/12/22 浏览次数:166 分类:Python

本教程演示了 Python 中如何比较两个日期并检查哪个日期更大。本教程解释了如何在 Python 中比较两个日期。它有多种方法来确定哪个日期更大,所以教程还列出了不同的示例代码来阐述不同的

在 Python 中重新加载或取消导入模块

发布时间:2023/12/22 浏览次数:102 分类:Python

本教程演示了如何在 Python 中重新加载模块。模块允许我们在 Python 文件中存储不同函数和类的定义,然后这些文件可以在其他文件中使用。

在 Python 中暂停程序执行

发布时间:2023/12/22 浏览次数:190 分类:Python

本教程介绍了如何在 Python 中暂停程序。本教程将演示 Python 中暂停程序的各种方法。暂停程序的执行或应用在不同的场景下使用,比如当一个程序需要输入用户时。

从 Python 中的子目录导入模块

发布时间:2023/12/22 浏览次数:100 分类:Python

本教程演示了如何在 Python 中从子目录导入一个文件。本教程将讲解 Python 中从子目录导入模块的各种方法。假设我们在项目目录的子目录下有一个文件,我们想导入这个文件并在代码中使用它

Python 中的 if not 语句

发布时间:2023/12/22 浏览次数:146 分类:Python

本教程演示了在 Python 中使用 if not 语句。Python 中的 if 语句检查一个特定的条件,如果条件为真,则执行一个代码块。

在 Python 中生成随机质数

发布时间:2023/12/22 浏览次数:194 分类:Python

它演示了如何在 Python 中生成随机质数。本教程演示了在 Python 中生成和输出任何随机质数的方法。质数是在编程中使用的非常有用的常量,尤其是在密码学中。

在 Python 中将十六进制转换为十进制

发布时间:2023/12/22 浏览次数:184 分类:Python

本教程演示了如何在 Python 中把十六进制值转换为十进制值。在编程的世界里,我们处理属于不同数字系统的值。十六进制数就是这样一个系统。它被用于存储内存地址、IP 地址等。

在 Python 中漂亮打印字典

发布时间:2023/12/21 浏览次数:162 分类:Python

它演示了如何在 Python 中漂亮地打印字典。本教程将介绍如何在 Python 中漂亮地打印字典。漂亮打印的意思是以一种更可读的格式或风格来呈现一些打印的内容。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便