我有一个包含 JavaScript 二进制数据的字符串。例如,现在我想从中读取一个整数。所以我得到前 4 个字符,使用 charCodeAt
,进行一些移位等操作以获得一个整数。
问题是 JavaScript 中的字符串是 UTF-16(而不是 ASCII),charCodeAt
经常返回高于 256 的值。
Mozilla reference声明“前 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"
关于javascript - 从 JavaScript 字符串中读取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1240408/