如何在JavaScript中将数字的二进制表示从字符串转换为整数?

52

请问有人能给我一些建议吗?

我有一个字符串,例如"01001011",我需要将其反转,因此我使用了.split('') 然后使用 .reverse(),现在我需要将数组作为字符串读取并将其转换为整数。这是可能的吗?

谢谢


如果你想要做相反的操作,请参考这里:https://dev59.com/hWkw5IYBdhLWcg3wXpec - Anderson Green
3个回答

78
如果你想将数组转换回字符串,请使用join()函数(MDN);如果要将字符串转换为整数,请使用parseInt()函数(MDN)。后者的第二个参数是可选的进制数。
JavaScript会尝试确定所需的进制数,但为了确保正确性,您应该始终手动添加进制数。引用自MDN:
“如果radix未定义或为0,则JavaScript假定以下内容:
- 如果输入字符串以“ 0x”或“ 0X”开头,则进制为16(十六进制)。 - 如果输入字符串以“ 0”开头,则进制为8(八进制)。这个特性不是标准的,某些实现故意不支持它(而是使用基数10)。因此,在使用parseInt时始终指定一个基数。 - 如果输入字符串以任何其他值开头,则进制为10(十进制)。 ”
因此,在您的情况下,以下代码应该有效:
var a = '01001011';

var b = parseInt( a.split('').reverse().join(''), 2 );
或者(如果您想转换起始字符串而不进行反转):
var b = parseInt( a, 2 );

36

只需使用不同的基数调用 parseInt 函数,对于二进制,使用基数 2。

var a = parseInt("01001011", 2);
// a === 75
parseInt函数在您未明确指定进制时会尝试自行确定。根据Mozilla开发者网络所述:

如果进制数radixundefined或0,则JavaScript假设以下内容:

  • 如果输入的string以"0x"或"0X"开头,则进制数为16(十六进制)。
  • 如果输入的string以"0"开头,则进制数为8(八进制)。此功能是非标准的,并且某些实现故意不支持它(而是使用进制数10)。因此,在使用parseInt时始终指定进制数
  • 如果输入的string以其他任何值开头,则进制数为10(十进制)。

在这种情况下,必须明确指定进制数,否则它可能被解释为十进制或八进制数。作为一个经验法则,请始终指定进制数。


1
请注意,在这种情况下,默认基数实际上是8,因为该字符串以“0”开头。 - James Allardice

5
这将把一个 buffer 十六进制值转换为二进制字符串,再转回到 buffer 十六进制值。
注意:当我说 buffer 十六进制值时,我指的是十进制值,因为当你迭代一个 buffer 并且取出数组中的每个元素时,它会给你一个十进制值(例如:210,而不是 d2)。
需要熟悉 buffers。
您可以使用 for(){} 迭代 buffer,然后在内部执行以下操作: (210).toString(2); // '11010010' (210).toString(16); // 'd2' (未经测试) (210).toString(8); // (八进制数字表示法) parseInt((210).toString(2), 2); // 210 parseInt((210).toString(2), 2).toString(16); // 'd2' 显然,您应该在 FOR 循环中使用 "(buffer[i]).toString(2)" 而不是 "(210).toString(2)"。
大端序还是小端序由您决定!(使用 array.reverse())
希望这能有所帮助!
附注:parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2 parseInt((210).toString(2).substring(5, 8), 2); // 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接