在JS中如何将字符串类型的十六进制转换为数字?

Posted

技术标签:

【中文标题】在JS中如何将字符串类型的十六进制转换为数字?【英文标题】:How do you convert a hexadecimal of type string to number in JS? 【发布时间】:2018-12-03 04:51:19 【问题描述】:

假设我有一个十六进制,例如"0xdc",如何在JS中将这个十六进制的string转换为十六进制的Number

实际上只是丢失了引号。 Number() 构造函数和 parseInt() 只是将其转换为 0 到 255 之间的整数,我只想要 0xdc

编辑:

为了让我的观点更清楚: 我想从"0xdc"String 类型)转到0xdcNumber 类型)

【问题讨论】:

【参考方案1】:

可以使用Number函数,将字符串按照一定的格式解析为数字。

console.log(Number("0xdc"));

javascript 使用一些符号来识别数字格式,例如 -

    0x = 十六进制 0b = 二进制 0o = 八进制

【讨论】:

不,静止返回一个确切的数字,220。我想要文字字节,所以我想要"0xdc",而不是0xdc 你想用0xdcNumber类型做什么?好像您分配任何变量,例如var v = 0xdc,如果您尝试执行console.log(v),它将给出220 而不是0xdc 我想将它发送为我通过 UDP 发送的缓冲区中的动态值,例如:Buffer.from([0x00, 0x0E, dynamicStringValue, 0xef]) dynamicStringValue 应该是一个数字而不是一个字符串,我的缓冲区才能正常工作,对吗? 看到上面的答案,你是对的。我可以将您的代码产生的整数发送到我的缓冲区。谢谢。 这里的parseInt() 是多余的。 Number() 已经返回一个数字类型(它在内部只存储在 1 和 0 中,并且不知道原始字符串是二进制/八进制/十进制/十六进制)。 parseInt() 在这里所做的一切,就是将 Number("0xdc") 的结果转回(十进制/base-10)字符串,然后再次将其转换为相同的数字。【参考方案2】:

TL;DR

@dhaker 的回答

parseInt(Number("0xdc"), 10) 是正确的。

内存中的数字表示

0xdc220 这两个数字在 javascript 中的表示方式相同

所以 0xdc == 220 将返回 true。 前缀0x用于告诉javascript该数字是hex

所以无论您经过220,您都可以安全地通过0xdc,反之亦然

字符串格式

数字始终以 10 为基数显示,除非指定不这样做。

'0x' + Number(220).toString(16) 如果您想将其打印为字符串,则提供'0xdc'


简而言之

parseInt('0x' + Number(220).toString(16),16) => 220

【讨论】:

啊,我明白了,我理解错了。我可以只使用以 10 为底的表示。谢谢。【参考方案3】:

如果要将字符串转换为十六进制表示,可以转换为以 16 为基数的数字。

parseInt("0xdc", 16)  // gives you 0xdc

【讨论】:

以上是关于在JS中如何将字符串类型的十六进制转换为数字?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

如何将十六进制字符串转换为十六进制数字

如何将我的十六进制字符串转换为数字? [复制]

如何将二进制整数转换为十六进制字符串?

如何将十六进制字符串转换为十六进制数字 [重复]