从字符串中提取二进制数据,在javascript中设置符号位

时间:2016-03-29 17:02:56

标签: javascript node.js

我有一个看起来像这样的字符串"��是一些测试文本"

前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的替换字符,问题是,从字符串中提取二进制数据的替代方法是什么?

由于

0 个答案:

没有答案