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

问题描述 投票:0回答:4

有人可以给我一点建议吗?

我有一个字符串,例如“01001011”,我需要做的是反转它,所以我使用

.split('')
而不是
.reverse()
,现在我需要将数组作为字符串读取并将其转换为整数。可以吗?

谢谢

javascript type-conversion
4个回答
78
投票

如果要将数组转换回字符串,请使用

join()
(MDN);如果要将字符串转换为整数,请使用
parseInt()
(MDN)。后者的第二个参数是可选的基数。

JavaScript 将尝试确定使用什么基数,但为了确保您应该始终手动添加基数。引用自MDN:

如果基数未定义或为 0,JavaScript 会进行以下假设:

  • 如果输入字符串以“0x”或“0X”开头,则基数为16(十六进制)。

  • 如果输入字符串以“0”开头,则基数为八(八进制)。此功能是非标准的,某些实现故意不支持它(而是使用基数 10)。因此,在使用 parseInt 时始终指定基数。

  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)。

因此,在您的情况下,以下代码应该有效:

var a = '01001011';

var b = parseInt( a.split('').reverse().join(''), 2 );

或者只是(如果您想转换起始字符串而不反转):

var b = parseInt( a, 2 );

37
投票

只需使用不同的基数调用

parseInt
,在本例中使用 2 表示二进制。

var a = parseInt("01001011", 2);
// a === 75
当您未明确指定基数时,

parseInt
会尝试找出基数本身。 来自 Mozilla 开发者网络

如果基数为

undefined
或 0,JavaScript 会假设以下内容:

  • 如果输入
    string
    以“0x”或“0X”开头,则基数为16(十六进制)。
  • 如果输入
    string
    以“0”开头,则基数为八(八进制)。此功能是非标准的,某些实现故意不支持它(而是使用基数 10)。因此,在使用 parseInt
     时,请务必指定基数。
  • 如果输入
  • string
     以任何其他值开头,则基数为 10(十进制)。
在这种情况下,指定基数至关重要,否则它可能会被解释为十进制或八进制数。根据经验,请始终指定基数。


5
投票
这将获取十六进制缓冲区并将其转换为二进制 str,然后返回到十六进制缓冲区。

注意:当我说缓冲区十六进制时,我指的是十进制值,因为当您迭代缓冲区并拉取数组中的每个项目时,它会为您提供十进制值(例如:210,而不是 d2)。

var buffer - new Buffer([0, 210, 242]); // Node



// var arrayBuffer = new ArrayBuffer(3); // JavaScript



// var uint8 = new Uint8Array(arrayBuffer); // JavaScript/ 16Array, 32Array, etc



需要熟悉缓冲区

您将使用

for(){}

 迭代缓冲区,并且在内部您可以执行以下操作:

(210).toString(2); // '11010010'



(210).toString(16); // 'd2' (untested)



(210).toString(8); // (Octal-Digits representation)



parseInt((210).toString(2), 2); // 210



parseInt((210).toString(2), 2).toString(16); // 'd2'



显然,您可以使用“

(210).toString(2)

”,而不是在 FOR 循环中使用“
(buffer[i]).toString(2)

Endian Rep 由你决定! :) (数组.reverse())

希望这有帮助!

PS。

parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2



parseInt((210).toString(2).substring(5, 8), 2); // 2


    


1
投票
let binaryString = "1101"; let decimalNumber = parseInt(binaryString, 2); console.log(decimalNumber); // Output: 13
然后使用 parseInt 函数将字符串转换为十进制数。传递给 parseInt 的第二个参数是 2,这表示输入字符串以 2 为基数(二进制),该函数读取二进制字符串的每个数字,根据 2 的幂计算其十进制等效值,然后将它们相加。

© www.soinside.com 2019 - 2024. All rights reserved.