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

如何让JavaScript实现与PHP一致的hex2bin和base64_encode效果?

修复Node.js与PHP十六进制转Base64结果不一致的问题

给定十六进制源字符串:6b80b4ea6ebd435cbe6068aaaf2f6715,PHP通过hex2bin和base64_encode处理后得到结果:a4C06m69Q1y+YGiqry9nFQ==,但原有Node.js代码输出结果不一致,以下是修复方案:

原有Node.js代码的问题

  • 自定义hex2bin函数用String.fromCharCode转换字节为字符串,会将原始字节按UTF-16编码解析,和PHPhex2bin返回的原始二进制字节流逻辑不符。
  • Base64编码步骤错误:Buffer.from(hex).toString('base64')是直接把十六进制字符串当普通字符转Buffer再编码,而非先将十六进制解析为原始字节流。

修改后的简洁Node.js代码

const hex = "6b80b4ea6ebd435cbe6068aaaf2f6715";

console.log('hex ' + hex);
// 用Buffer内置的十六进制解析能力获取原始字节流
const buffer = Buffer.from(hex, 'hex');
// 模拟PHP hex2bin的输出(原始字节转字符串,不可打印字符显示为乱码)
console.log('hex2bin ' + buffer.toString('binary'));
// 生成与PHP一致的Base64结果
console.log('base64_encode ' + buffer.toString('base64'));

代码说明

  1. 十六进制转原始字节:Buffer.from(hex, 'hex')直接将十六进制字符串解析为对应原始字节流,和PHPhex2bin行为完全一致。
  2. 模拟hex2bin输出:PHP中hex2bin输出时会将每个字节按ASCII字符显示(不可打印字符为乱码),buffer.toString('binary')可以模拟这一输出效果。
  3. Base64编码:直接对解析后的Buffer调用toString('base64'),得到和PHPbase64_encode完全相同的结果:a4C06m69Q1y+YGiqry9nFQ==。

内容的提问来源于stack exchange,提问作者Ant Sot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:47:15