Python解析TLV值输出内存地址,如何获取实际字符串值?
解决tlv8.Entry对象打印显示内存地址的问题
tlv8模块解析TLV后返回的tlv8.Entry是自定义对象,直接打印会输出对象的默认字符串表示(类似内存地址),你需要访问对象的属性来提取实际数据。
具体步骤与代码示例
1. Base64解码为TLV二进制数据
先把Base64字符串解码成TLV格式的二进制字节流:
import base64 import tlv8 # 替换成你的目标Base64字符串 base64_str = "你的Base64内容" tlv_bytes = base64.b64decode(base64_str)
2. 解析TLV并提取真实值
tlv8.Entry对象包含三个核心属性:
tag: TLV的标签标识(整数或字节类型)length: 数据的字节长度value: 存储的实际数据(字节类型)
你需要读取value属性,并根据数据的实际编码转换为字符串:
# 解析TLV数据 entries = tlv8.parse(tlv_bytes) # 遍历每个条目,提取并打印真实值 for entry in entries: # 假设数据是UTF-8编码,根据实际情况调整编码格式 real_data = entry.value.decode('utf-8') print(f"标签: {entry.tag}, 真实值: {real_data}")
3. 特殊数据类型处理
如果TLV存储的不是字符串,而是其他类型,需要对应转换:
- 整数类型:
int.from_bytes(entry.value, byteorder='big')(根据实际字节序调整) - 二进制数据转十六进制:
entry.value.hex()
完整可运行示例
import base64 import tlv8 # 示例Base64字符串(解码后对应包含"Hello TLV"的TLV数据) sample_base64 = "SGVsbG8gVExW" # 解码Base64 tlv_data = base64.b64decode(sample_base64) # 解析TLV tlv_entries = tlv8.parse(tlv_data) # 遍历输出真实值 for i, entry in enumerate(tlv_entries): try: # 尝试转UTF-8字符串 value = entry.value.decode('utf-8') except UnicodeDecodeError: # 转失败则输出十六进制 value = entry.value.hex() print(f"条目 {i+1}: 标签={entry.tag}, 值={value}")
内容的提问来源于stack exchange,提问作者Null Zero
相关产品推荐
相关产品推荐

