py将十六进制转字符串
时间: 2023-05-04 13:05:16 浏览: 61
在Python中,可以使用内置函数chr()将十进制的数转换成其对应的ASCII字符。而对于十六进制的数,我们可以先使用内置函数int()将其转换成十进制数,再使用chr()将其转换成对应的ASCII字符。具体代码如下:
```
hex_str = "616263" # 十六进制字符串
dec_num = int(hex_str, 16) # 将十六进制字符串转换为十进制数
str = chr(dec_num) # 将十进制数转换为ASCII字符
print(str)
```
上述代码输出的是字符"a",因为十六进制数"61"对应的ASCII字符就是"a"。如果要将一个十六进制字符串中的所有十六进制数都转换成对应的字符,则需要使用循环来遍历字符串中的每个数,继而将其转换成字符即可。
相关问题
2. 二进制文件查看器 模仿UltraEdit/EditPlus二进制文件编辑模式,编写一个简单的二进制文件查看器(控制台输出即可),参考附件EditPlus_Hex.png图片。 其中,左边为当前行的首地址(十六进制表示),中间是每行16个字节的16进制字符,每字节间用一个空格分隔,8个字节之后用两个字节分隔,右边为这16字节的ASCII码表示(非可打印字符使用点号或其他符号代替)。不足16字节的行,仍然要保持这三部分的对齐。
以下是一个简单的二进制文件查看器的实现,可以在控制台输出二进制文件的内容:
```python
import argparse
def hexstr(byte_str):
"""
将字节串转换成十六进制字符串
"""
return " ".join("{:02x}".format(x) for x in byte_str)
def ascii_str(byte_str):
"""
将字节串中的不可打印字符转换成点号
"""
return "".join(chr(x) if 32 <= x < 127 else "." for x in byte_str)
def print_hexdump(data, start_address=0, bytes_per_line=16):
"""
打印二进制文件的十六进制和ASCII码表示
"""
address_format = "{:08x}"
hex_format = "{:<47}"
ascii_format = "{}"
for i in range(0, len(data), bytes_per_line):
line_data = data[i:i+bytes_per_line]
line_address = start_address + i
hex_str = hexstr(line_data)
ascii_str = ascii_str(line_data)
print(address_format.format(line_address), hex_format.format(hex_str), ascii_format.format(ascii_str))
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="A simple binary file viewer.")
parser.add_argument("filename", help="The name of the binary file to view.")
parser.add_argument("--start", type=int, default=0, help="The starting address to view (in hexadecimal).")
parser.add_argument("--bytes", type=int, default=16, help="The number of bytes to display per line.")
args = parser.parse_args()
with open(args.filename, "rb") as f:
data = f.read()
print_hexdump(data, args.start, args.bytes)
```
运行该程序时,需要指定要查看的二进制文件的名称,以及可选的起始地址和每行字节数。例如,要查看名为“myfile.bin”的文件的内容,可以执行以下命令:
```
python hexdump.py myfile.bin --start 0x100 --bytes 32
```
将在控制台上输出类似于以下内容的内容:
```
00000100 3c a5 2b 6e 30 96 4d 84 a8 2e 2e 2e 00 00 00 00 <.+n0.M.........
00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
```
左边是十六进制地址,中间是16个字节的十六进制值,右边是相应的ASCII码表示。
py encode()
`encode()` 是 Python 内置的字符串方法之一,用于将字符串编码为指定的编码格式的字节串。例如,将一个 Unicode 字符串编码为 UTF-8 字节串:
```python
text = "你好,世界!"
encoded_text = text.encode("utf-8")
print(encoded_text)
```
输出:
```
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
```
其中,`b''` 表示字节串,`\x` 开头的序列表示字节的十六进制表示。