如何区分二进制和十六进制值

时间:2018-05-10 20:36:15

标签: javascript binary hex

假设我需要用户输入二进制或十六进制值,程序将从那里获取它。有没有办法区分他们输入的值是二进制还是十六进制?

我以为通过检查字符串是否包含大于1的字母或数字,但是在101101或其他类似的十六进制输入的情况下怎么办?是否有可能在没有任何其他背景的情况下知道?

为了包含失败的尝试,我尝试了以下内容来检查字符串是否包含十六进制值可能的字母:

if (Number.isInteger(parseInt(input)))

但除了没有解决上述问题(因为十六进制值并不总是有字母)之外,它也会失败,因为当字母混合到输入中时它仍然返回true,因为它仍然以这种或那种方式解析整数。

1 个答案:

答案 0 :(得分:2)

  

是否有可能在没有任何其他背景的情况下知道?

不,不是。编程语言通常允许在各种数字系统中使用数字文字,但必须相应地标记它们。在JavaScript中:

  • 无前缀:十进制。示例:12345
  • 0b前缀:二进制。示例:0b10101
  • 0o前缀:八进制。示例:0o123
  • 0x前缀:十六进制。示例:0x12345

您可能需要输入相同的表示法,或者您提供另一个允许用户选择系统的控件(您仍然可以正确地为输入添加内部前缀)。

为了完整性,这里有一个函数可以将任何这些输入转换为数字:

const radixTable = {
  '0b': 2,
  '0o': 8,
  '0x': 16,
};

function convert(str) {
  let radix = 10;
  if (radixTable.hasOwnProperty(str.slice(0, 2))) {
      radix = radixTable[str.slice(0,2)];
      str = str.slice(2);
  }
  return parseInt(str, radix);
}

['12', '0b1100', '0o14', '0xC'].forEach(
  str => console.log(`${str}:`, convert(str))
);