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

如何修改Python代码使字节数组转十六进制字符串与JS输出一致?

问题:Python实现字节数组转十六进制字符串与JS结果不一致的解决方法

问题背景

JavaScript示例代码及输入输出

function toHexString(bytes) {
  return bytes.map(function(byte) {
      return ("00" + (byte & 0xFF).toString(16)).slice(-2);
    }).join('');
}

// 输入
Buffer.from("333138383223633D77DB", 'hex')
// 输出(注:此处输出疑似笔误,正常10字节应输出20位十六进制)
333138383223630770

Python实现代码及输入输出

def toHexString(byteArray):
    return ''.join('{:02x}'.format(x) for x in byteArray)

// 输入
bytearray.fromhex("333138383223633D77DB")
// 输出
333138383223633d77db

差异分析与修正方案

你提供的JS输出333138383223630770不符合10字节转20位十六进制的预期,大概率是输入笔误。结合JS代码逻辑,差异主要来自以下两种场景,对应修正方案如下:

1. 大小写格式调整

JS中toString(16)默认输出小写,但如果实际需求是输出大写十六进制(与常见Hex字符串规范一致),修改Python代码的格式符为大写即可:

def toHexString(byteArray):
    return ''.join('{:02X}'.format(x) for x in byteArray)

此时输入bytearray.fromhex("333138383223633D77DB")会输出333138383223633D77DB,与JS代码的大写输出完全一致。

2. 兼容有符号字节场景

如果JS中的bytes是有符号字节数组(部分元素为负数),byte & 0xFF用于将负数转换为无符号8位整数。Python中bytearray的元素默认是无符号0-255整数,但如果输入包含负数,需要添加相同的转换逻辑:

def toHexString(byteArray):
    return ''.join('{:02x}'.format(x & 0xFF) for x in byteArray)

此代码会将负数转换为对应的无符号8位值后再转十六进制,与JS逻辑完全对齐。

内容的提问来源于stack exchange,提问作者Chau Loi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:10:35