我有一个看起来像这样的字符串"��是一些测试文本"
前2个字节是字符串其余部分的长度(这是无法更改的旧网络流量)。
如果在二进制数据中没有设置符号位,它会解码,但如果是,我会得到垃圾。
这是一个小测试程序:
var decode = '';
//decode = new Buffer('ffff', 'hex');
//decode = new Buffer('85ff', 'hex');
decode = new Buffer('364e', 'hex');
//decode = new Buffer('7f5a', 'hex');
//decode = new Buffer('00ff', 'hex');
decode += '<this>is some test text</this>';
console.log(decode);
var testbuf = decode.slice(0,2);
console.log('testbuf =' + testbuf);
var myLength1 = decode.slice(0,1).charCodeAt('hex').toString(16);
console.log('ml1 ' + myLength1.toString());
var myLength2 = decode.slice(1,2).charCodeAt('hex').toString(16);
console.log('ml2 ' + myLength2.toString());
var myLength = myLength1 + myLength2;
console.log('mylength =' + myLength1 + myLength2);
var foo2 = parseInt(myLength, 16);
console.log('ml3 ' + foo2.toString());
使用上面的代码输出如下所示;
node foo.js
6N<this>is some test text</this>
testbuf =6N
ml1 36
ml2 4e
mylength =364e
ml3 13902
当符号位未设置时答案是正确的,但如果数据包含设置了高位的值,那么对于设置了高位的每个字符,我最终会得到fffd(替换字符)
这是高位数据输出(使用上面的0x85ff数据线):
node foo.js
��<this>is some test text</this>
testbuf =��
ml1 fffd
ml2 fffd
mylength =fffdfffd
ml3 4294836221
我知道这是因为charCodeAt()函数希望返回&#39; fffd&#39;作为非ascii的替换字符,问题是,从字符串中提取二进制数据的替代方法是什么?
由于