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

如何用JavaScript将带冒号的十六进制值转换为预期的十进制大整数?

解决十六进制字符串转指定十进制格式的问题

问题根源

你的代码存在两个关键问题:

  • 冒号替换不彻底:replace(':', '')仅替换第一个冒号,剩余的冒号会让parseInt解析时提前终止(遇到非十六进制字符即停止),实际只解析了043d,所以得到结果1085。
  • 缺少前导0格式化:正确转换后的十进制数是1193333618139520,而你需要的是带前导0的17位字符串格式。

修正后的代码

方法一:使用Number处理(当前数值在安全范围内)

const value = `04:3d:54:a2:68:61:80`
// 全局替换所有冒号,得到完整十六进制字符串
const cleanHex = value.replace(/:/g, '')
// 十六进制转十进制数值
const decimalValue = parseInt(cleanHex, 16)
// 补前导0到17位长度
const barcode = decimalValue.toString().padStart(17, '0')
console.log(barcode) // 输出:01193333618139520

方法二:使用BigInt处理(兼容更大数值场景)

如果后续需要处理超出Number安全范围的十六进制数,用BigInt更稳妥:

const value = `04:3d:54:a2:68:61:80`
const cleanHex = value.replace(/:/g, '')
// 用BigInt解析十六进制
const decimalValue = BigInt(`0x${cleanHex}`)
// 补前导0到17位长度
const barcode = decimalValue.toString().padStart(17, '0')
console.log(barcode) // 输出:01193333618139520

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

相关产品推荐
方舟 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