Java字节数组转ASCII十六进制后长度翻倍,求Python等效实现方案
原因说明
十六进制编码的固有规则为每个原始字节对应2个十六进制字符,因此6字节的原始数组转成十六进制字符串后长度为12,所有十六进制字符(0-9、a-f)都属于US_ASCII编码范围,每个字符转成字节后占1字节,最终写入缓冲区的字节长度为12属于标准预期行为。
Python 等价实现代码
# 原始字节数组,对应Java的byte[] id = {1, 64, 71, -17, -65, -67} # 注:Java byte为有符号类型,负数需加256转为0-255范围的整数传入Python bytes构造 id_bytes = bytes([1, 64, 71, 239, 191, 189]) # 等价于 ByteBufUtil.hexDump(id):转小写十六进制字符串 hex_str = id_bytes.hex() # 等价于 getBytes(StandardCharsets.US_ASCII):转US_ASCII编码字节 result = hex_str.encode('ascii') # 验证结果 print(len(result)) # 输出12 print(list(result)) # 输出[48, 49, 52, 48, 52, 55, 101, 102, 98, 102, 98, 100],和Java结果完全一致
注意事项
如果出现长度不一致的情况,检查以下几点即可:
- 原始字节数组的长度是否和Java侧完全一致,注意Java有符号byte转Python无符号字节的转换正确性
- 十六进制输出必须为小写,和
ByteBufUtil.hexDump的默认输出格式对齐 - 编码必须指定为
ascii,不要使用其他编码格式
内容的提问来源于stack exchange,提问作者Adebari Olalekan
相关产品推荐
相关产品推荐

