从javascript中设置符号位的字符串中提取二进制数据
我有一根像这样的线“��是一些测试文本“ 前2个字节是字符串其余部分的长度(这是无法更改的传统网络流量) 当二进制数据中没有设置符号位时,它解码正常,但如果设置了符号位,我就得到垃圾 下面是一个小测试程序:从javascript中设置符号位的字符串中提取二进制数据,javascript,node.js,Javascript,Node.js,我有一根像这样的线“��是一些测试文本“ 前2个字节是字符串其余部分的长度(这是无法更改的传统网络流量) 当二进制数据中没有设置符号位时,它解码正常,但如果设置了符号位,我就得到垃圾 下面是一个小测试程序: var decode = ''; //decode = new Buffer('ffff', 'hex'); //decode = new Buffer('85ff', 'hex'); decode = new Buffer('364e', 'hex'); //decode = new B
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());
var decode='';
//解码=新缓冲区('ffff','hex');
//解码=新缓冲区('85ff','hex');
解码=新缓冲区('364e','hex');
//解码=新缓冲区('7f5a','hex');
//解码=新缓冲区('00ff','hex');
解码+='是一些测试文本';
控制台日志(解码);
var testbuf=解码切片(0,2);
log('testbuf='+testbuf);
var myLength1=decode.slice(0,1).charCodeAt('hex').toString(16);
log('ml1'+myLength1.toString());
var myLength2=decode.slice(1,2).charCodeAt('hex').toString(16);
log('ml2'+myLength2.toString());
var myLength=myLength1+myLength2;
log('mylength='+myLength1+myLength2);
var foo2=parseInt(myLength,16);
log('ml3'+foo2.toString());
使用输出上面的代码如下所示
node foo.js
6N<this>is some test text</this>
testbuf =6N
ml1 36
ml2 4e
mylength =364e
ml3 13902
node foo.js
6Nis一些测试文本
testbuf=6N
ml1 36
ml2 4e
mylength=364e
ml3 13902
当没有设置符号位时,答案是正确的,但是如果数据包含一个高位集的值,那么对于具有高位集(替换字符)的每个字符,我将使用fffd结束
这是高阶位数据的输出(使用上面的0x85ff数据行):
node foo.js
��这是一些测试文本
testbuf=��
ml1 fffd
ml2 fffd
mylength=fffdfffd
ml3 4294836221
我知道这是因为charCodeAt()函数希望返回'fffd'作为它认为非ascii的替换字符,问题是,从字符串中提取二进制数据的替代方法是什么
谢谢
node foo.js
��<this>is some test text</this>
testbuf =��
ml1 fffd
ml2 fffd
mylength =fffdfffd
ml3 4294836221