繁体   English   中英

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

[英]How to convert binary representation of number from string to integer number in JavaScript?

请问有人给我一点意见吗?

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

谢谢

如果要将数组转换回字符串,请使用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 );

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

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

当您没有明确指定基数时, parseInt尝试找出基数本身。 来自Mozilla开发者网络

如果radix undefined或为0,则JavaScript假定以下内容:

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

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

这将采用缓冲区十六进制并将其转换为二进制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) ”在你的循环中,你可以使用“ (buffer[i]).toString(2)

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

希望这可以帮助!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM