在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
类型)转到0xdc
(Number
类型)
【问题讨论】:
【参考方案1】:可以使用Number
函数,将字符串按照一定的格式解析为数字。
console.log(Number("0xdc"));
javascript 使用一些符号来识别数字格式,例如 -
0x
= 十六进制
0b
= 二进制
0o
= 八进制
【讨论】:
不,静止返回一个确切的数字,220。我想要文字字节,所以我想要"0xdc"
,而不是0xdc
你想用0xdc
Number
类型做什么?好像您分配任何变量,例如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)
是正确的。
内存中的数字表示
0xdc
和 220
这两个数字在 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 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]