Avro反序列化中fixed类型MAC地址输出格式相关问题咨询
问题1:b"\x36\xe9\xad\x64\x2d\x3d" 是否对应36:e9:ad:64:2d:3d
是完全对应的。\x后接的是单字节的十六进制表示,按顺序提取每段十六进制值拼接后用冒号分隔,就是你提到的标准MAC地址格式。
问题2:b""前缀是否为fixed类型的预期输出
b""是Python中bytes类型的字面量标识,不是Avro fixed类型的原生输出。
Avro的fixed类型在Python官方avro库中反序列化后本来就是bytes类型,你代码中直接调用str(record)将整条记录转为字符串写入文件,bytes类型转字符串时会自动带上b''前缀,属于str()转换带来的附加格式,不属于异常情况。
问题3:MAC值中出现j、%等字符的含义
Python输出bytes字面量时,对字节值落在ASCII可打印字符范围内的字节,会直接输出对应可打印字符,而非\x转义格式:
- 示例
b"j\x26\xb7\xda\x1d\xf6"中的j对应字节值0x6A,整段MAC转换后为6a:26:b7:da:1d:f6 - 示例
b"\x28\xcb\xc5v\x14%"中的v对应0x76、%对应0x25,整段MAC转换后为28:cb:c5:76:14:25
所有输出本质都是符合你定义的size=6要求的6字节二进制值,是合法的MAC地址存储格式。
标准MAC地址格式转换代码
你可以直接对反序列化得到的bytes类型MAC值做格式化,避免str()转换带来的冗余标识:
# 从记录中取到bytes类型的MAC地址 mac_bytes = record["MacAddress"] # 转为冒号分隔的小写十六进制MAC格式 standard_mac = ":".join(f"{byte:02x}" for byte in mac_bytes)
内容的提问来源于stack exchange,提问作者bhdrozgn
相关产品推荐
相关产品推荐

