在 Python 中转换字节为十六进制

Rayven Esplanada 2023年1月30日
  1. Python 中初始化字节文字
  2. 在 Python 中使用 hex() 方法将一个字节转换成十六进制
  3. 在 Python 中使用 binascii 模块将一个字节转换为十六进制
在 Python 中转换字节为十六进制

本教程将介绍如何在 Python 中把字节转换成十六进制。

Python 中的字节数据类型是一个字节序列,它可以作为一个变量存储在磁盘上,然后可以对其进行编码和解码。它们像字符串一样被声明,但前缀是字符 b。字节接受特殊的 Unicode 字符,前缀为\x

Python 中初始化字节文字

我们会给出一个字节文字的例子,声明一个带有特殊字符的字符串,并使用函数 encode('utf-8') 将其转换为字节文字。

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print(byte_var)

输出:

b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'

encode() 的输出结果将是一个以字符 b 为前缀的字节文字和特殊字符转换为 Unicode 符号。

现在一个字节的声明已经完成,让我们继续将一个字节转换成十六进制。

在 Python 中使用 hex() 方法将一个字节转换成十六进制

从 Python 3.5 引入的 hex() 方法将其转换为十六进制字符串。

在这种情况下,参数将是要转换为十六进制的字节数据类型。

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", byte_var.hex())

输出:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274

在 Python 中使用 binascii 模块将一个字节转换为十六进制

Python binascii 模块包含了二进制和 ASCII 操作的高效实用函数。

在这个模块中,有一个函数 hexlify(),它返回给定参数的十六进制值,即二进制值。

在这个例子中,参数将是要转换为十六进制的字节变量。

import binascii

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", binascii.hexlify(byte_var))

输出:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  b'ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274'

请注意,hexlify() 的返回值是一个字节文字,与 hex() 不同,后者返回一个转换后的字符串。

如果你想把结果转换成字符串,使用函数 decode('utf-8')

import binascii

byte_var = "γιαούρτι - yogurt".encode("utf-8")

print("Byte variable: ", byte_var)
print("Hexadecimal: ", "" + binascii.hexlify(byte_var).decode("utf-8"))

输出:

Byte variable:  b'\xce\xb3\xce\xb9\xce\xb1\xce\xbf\xcf\x8d\xcf\x81\xcf\x84\xce\xb9 - yogurt'
Hexadecimal:  ceb3ceb9ceb1cebfcf8dcf81cf84ceb9202d20796f67757274

现在十六进制的结果已经从一个字节文字转换成了一个字符串。

综上所述,我们已经介绍了在 Python 中把一个字节转换成十六进制的 2 种方法。最简单的方法是使用内置的函数 hex() 将一个字节文字转换为十六进制。另外,也可以使用 binascii 模块中的 hexlify() 函数来产生同样的输出。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相关文章 - Python Bytes

相关文章 - Python Hex