You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:06:01