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

Posted

技术标签:

【中文标题】如何在JavaScript中将数字的二进制表示从字符串转换为整数?【英文标题】:How to convert binary representation of number from string to integer number in JavaScript? 【发布时间】:2012-06-21 15:23:12 【问题描述】:

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

我有一个字符串,例如“01001011”,我需要做的是反转它,所以我使用.split('')而不是.reverse(),现在我需要将数组作为字符串读取并将其转换为整数.有可能吗?

谢谢

【问题讨论】:

如果你想反其道而行之,请看这里:***.com/questions/9939760/… 【参考方案1】:

只需使用不同的基数调用parseInt,在这种情况下,使用 2 表示二进制。

var a = parseInt("01001011", 2);
// a === 75

parseInt 会在您未明确指定时尝试计算基数本身。 From the Mozilla Developer Network:

如果基数是 undefined 或 0,javascript 假定如下:

如果输入 string 以“0x”或“0X”开头,则基数为 16(十六进制)。 如果输入string 以“0”开头,则基数为八(八进制)。这个特性是非标准的,一些实现故意不支持它(而是使用基数 10)。因此在使用parseInt时总是指定一个基数。 如果输入 string 以任何其他值开头,则基数为 10(十进制)。

在这种情况下,指定基数至关重要,否则它可能会被解释为十进制或八进制数。根据经验,请始终指定基数。

【讨论】:

请注意,在这种情况下,默认基数实际上是 8,因为字符串以 0 开头。【参考方案2】:

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

JavaScript 会尝试确定要使用的基数,但要确保始终手动添加基数。引用自 MDN:

如果 radix 未定义或为 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 );

【讨论】:

【参考方案3】:

这将采用缓冲区十六进制并将其转换为二进制 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'

显然,在 YOU FOR LOOP 中不要使用“(210).toString(2)”,而是使用“(buffer[i]).toString(2)

Endian 代表由您决定! :) (array.reverse())

希望这会有所帮助!

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

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

【讨论】:

以上是关于如何在JavaScript中将数字的二进制表示从字符串转换为整数?的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中将十六进制数字格式化为短 UUID

如何将二进制表示的数字转换为雪花数

在Javascript中将rgb字符串转换为十六进制

新网站在数字类型输入中将十进制逗号转换为 ~ 点,反之亦然。该浏览器功能的 Javascript 名称?

如何在Java中将非常大的十进制数转换为二进制数

如何在 JS 中将字节添加到十六进制转义序列