本篇给出python的几个和编码相关的函数,然后经由AI整理创作。推荐完成pwn.college [Dealing with Data]练习。

一、字符串与字节串的相互转换

1. 字符串编码为字节串

# 将字符串编码为指定编码的字节串
text = "Hello 世界"
encoded = text.encode('utf-8')  # b'Hello \xe4\xb8\x96\xe7\x95\x8c'

2. 字节串解码为字符串

# 将字节串解码为字符串
bytes_data = b'Hello \xe4\xb8\x96\xxe7\x95\x8c'
decoded = bytes_data.decode('utf-8')  # "Hello 世界"

二、数值与字节串的转换

1. 十六进制字符串与字节串

# 十六进制字符串转字节串
hex_str = "48656c6c6f"
bytes_data = bytes.fromhex(hex_str)  # b'Hello'

# 字节串转十六进制字符串
hex_result = bytes_data.hex()  # '48656c6c6f'

2. 整数与字节串的转换

# 整数转字节串
num = 12345
bytes_data = num.to_bytes(length=2, byteorder='big')  # b'09'

# 字节串转整数
result = int.from_bytes(bytes_data, byteorder='big')  # 12345

三、数值的进制转换

1. 十进制转其他进制

num = 255

# 转十六进制字符串
hex_str = hex(num)  # '0xff'

# 转二进制字符串
bin_str = bin(num)  # '0b11111111'

2. 其他进制转十进制

# 自动识别进制(0o开头为8进制,0x开头为16进制,0b开头为2进制)
num1 = int('0xff', 0)     # 255
# 手动指定进制
num2 = int('ff', 16)      # 255
num3 = int('11111111', 2) # 255

四、Base64编码

base64.b64encodebase64.b64decode均是将字节串转为字节串

1. Base64编码

import base64

# 字符串转Base64
text = "Hello World"
encoded = base64.b64encode(text.encode('utf-8'))  # b'SGVsbG8gV29ybGQ='

# 文件内容Base64编码
with open('file.txt', 'rb') as f:
    file_encoded = base64.b64encode(f.read())

2. Base64解码

# Base64解码为字符串
decoded = base64.b64decode(encoded).decode('utf-8')  # "Hello World"

# Base64解码为文件
with open('output.txt', 'wb') as f:
    f.write(base64.b64decode(file_encoded))

五、标准输出操作

1. 文本模式输出

import sys

# 输出字符串(自动编码)
sys.stdout.write("Hello World\n")

2. 二进制模式输出

# 直接输出字节数据
sys.stdout.buffer.write(b'Binary data')

使用场景总结

  1. 网络通信:使用encode()/decode()进行字符串和字节串转换
  2. 文件操作:处理二进制文件时使用字节串操作
  3. 数据序列化:Base64常用于编码二进制数据为文本格式
  4. 底层数据处理:整数与字节串转换用于处理原始二进制数据
  5. 调试和显示:hex()和bin()用于查看数据的内部表示

注意事项

  • 编码解码时要确保使用相同的字符编码(推荐UTF-8)
  • 处理二进制数据时注意字节序(big/little endian)
  • Base64编码会增加约33%的数据大小
  • 文件操作时要明确区分文本模式和二进制模式