我有一个包含 JavaScript 中的二进制数据的字符串。现在我想从中读取一个整数。所以我得到前 4 个字符,使用charCodeAt
,进行一些移位等以获得整数。
问题是 JavaScript 中的字符串是 UTF-16(而不是 ASCII)并且charCodeAt
通常返回高于 256 的值。
The Mozilla 参考指出“前 128 个 Unicode 代码点与 ASCII 字符编码直接匹配”。 (如果 ASCII 值 > 128 呢?)。
我怎样才能转换结果charCodeAt
到 ASCII 值?或者有没有更好的方法将四个字符的字符串转换为 4 字节整数?
我相信您可以通过相对简单的位操作来做到这一点:
function stringToBytes ( str ) {
var ch, st, re = [];
for (var i = 0; i < str.length; i++ ) {
ch = str.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push( ch & 0xFF ); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while ( ch );
// add stack contents to result
// done because chars have "wrong" endianness
re = re.concat( st.reverse() );
}
// return an array of bytes
return re;
}
stringToBytes( "A\u1242B\u4123C" ); // [65, 18, 66, 66, 65, 35, 67]
通过读取字节数组(就像读取内存一样)并将其相加成更大的数字来对输出求和应该是一件简单的事情:
function getIntAt ( arr, offs ) {
return (arr[offs+0] << 24) +
(arr[offs+1] << 16) +
(arr[offs+2] << 8) +
arr[offs+3];
}
function getWordAt ( arr, offs ) {
return (arr[offs+0] << 8) +
arr[offs+1];
}
'\\u' + getWordAt( stringToBytes( "A\u1242" ), 1 ).toString(16); // "1242"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)