【问题标题】:Parsing string value to hex in JavaScript在 JavaScript 中将字符串值解析为十六进制
【发布时间】:2016-12-15 12:05:59
【问题描述】:

这很奇怪,不是吗?如果我只记得 0-9,A、B、C、D、E、F 字母代表十六进制值。 ABCDEFGHAIJ 怎么会有十六进制表示?

【问题讨论】:

  • parseInt("abcdefghi", 16) 在遇到的第一个非十六进制字符处中断。所以,你得到的是0xABCDEF
  • @Arnauld 评论的示例fiddle
  • 啊哈哈哈,我以为它正在做一些转换,比如比范围更大的值从最低数字开始循环,然后进行一些计算。没有尝试检查这个:)
  • "如果 parseInt 在指定的基数中遇到不是数字的字符,它会忽略它和所有后续字符并返回到该点解析的整数值。parseInt 将数字截断为整数值。允许前导和尾随空格。" - MDN

标签: javascript hex parseint


【解决方案1】:

正如 epascarello 在 cmets 中提到的,这里是 MDN documentation 的相关部分来解释这种行为:

如果 parseInt 在 指定的基数,它会忽略它以及所有后续字符和 返回解析到该点的整数值。 parseInt 截断 数字到整数值。允许前导和尾随空格。

因此,parseInt("abcdefghij", 16) 实际上会解析 "abcdef" 并停在那里。因此结果:

0xABCDEF = 11259375

了解这一点后,您可能希望使用自定义函数,当使用非十六进制字符串调用时,该函数将返回 NaN

function parseTrueHexa(str) {
  return str.match(/^ *[a-f0-9]+ *$/i) ? parseInt(str, 16) : NaN;
}

console.log("parseInt() says:");
console.log(parseInt("aBcD", 16));
console.log(parseInt("abcdz", 16));

console.log("parseTrueHexa() says:");
console.log(parseTrueHexa("aBcD"));
console.log(parseTrueHexa("abcdz"));

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2019-08-03
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多