dav*_*vid 34 javascript type-conversion
请问有人给我一点意见吗?
我有一个字符串,例如"01001011",我需要做的是反转它,所以我使用了.split('')比.reverse()现在我需要将数组作为字符串读取并将其转换为整数.可能吗?
谢谢
Sir*_*rko 51
如果要将数组转换回字符串使用 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 );
Run Code Online (Sandbox Code Playgroud)
或者只是(如果你想转换起始字符串,没有反转):
var b = parseInt( a, 2 );
Run Code Online (Sandbox Code Playgroud)
Mat*_*ens 17
只需parseInt使用不同的基数调用,在这种情况下使用2表示二进制.
var a = parseInt("01001011", 2);
// a === 75
Run Code Online (Sandbox Code Playgroud)
parseInt当您没有明确指定基数时,会尝试找出基数本身.来自Mozilla开发者网络:
如果radix为
undefined0或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
需要熟悉缓冲区
您将使用 a 迭代缓冲区,在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)IN YOU FOR LOOP中使用“ ” ,而是使用“ (buffer[i]).toString(2)”
Endian 代表由您决定!:) (array.reverse())
希望这可以帮助!
附注。 parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2
parseInt((210).toString(2).substring(5, 8), 2); // 2