假设我需要用户输入二进制或十六进制值,程序将从那里获取它。有没有办法区分他们输入的值是二进制还是十六进制?
我以为通过检查字符串是否包含大于1的字母或数字,但是在101101或其他类似的十六进制输入的情况下怎么办?是否有可能在没有任何其他背景的情况下知道?
为了包含失败的尝试,我尝试了以下内容来检查字符串是否包含十六进制值可能的字母:
if (Number.isInteger(parseInt(input)))
但除了没有解决上述问题(因为十六进制值并不总是有字母)之外,它也会失败,因为当字母混合到输入中时它仍然返回true,因为它仍然以这种或那种方式解析整数。
答案 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))
);