Javascript 使用缓冲区对象解码base64输入
我有一个客户端接口,它发送用base64编码的二进制数据。数据是描述事件的29字节自定义格式的字节有效负载。29字节由多个字段组成;每个都有独特的长度 我需要服务器对其进行解码,以便提取字段。我已经尝试使用该对象,就像我在另一个用例中使用该对象一样,但是没有成功Javascript 使用缓冲区对象解码base64输入,javascript,node.js,base64,decoding,Javascript,Node.js,Base64,Decoding,我有一个客户端接口,它发送用base64编码的二进制数据。数据是描述事件的29字节自定义格式的字节有效负载。29字节由多个字段组成;每个都有独特的长度 我需要服务器对其进行解码,以便提取字段。我已经尝试使用该对象,就像我在另一个用例中使用该对象一样,但是没有成功 buff = new Buffer('AR0AAAEKCgsLDAwAAATSAAAADsgAAAAAAAAAzMQ=', 'base64'); // track the current position // ... get out
buff = new Buffer('AR0AAAEKCgsLDAwAAATSAAAADsgAAAAAAAAAzMQ=', 'base64');
// track the current position
// ... get out to the data portion of the message
var position = 3;
// event type
var event_type = buff.slice(position,(position+3)).toString('utf8');
position += 3;
console.log('... event type: ' + event_type + ' /');
// address
var addr = buff.slice(position,(position+3)).toString('utf8');
position += 3;
console.log('... addr: ' + addr + ' /');
.toString('utf8')可能是根本原因。如何获取表示这些slice()调用中所需字节的字符串
我不会像通常使用base64编码那样在服务器上编写二进制数据的故事。那么我应该从base64转换为其他编码来访问单个字节吗
我在已知的文本字符串上使用了相同的代码,该字符串使用base64编码,以验证基本逻辑。但是,当源数据在编码之前是二进制数据时,console语句不会打印任何内容。我可以从二进制到base64再到字符串吗?数据似乎没有有效的ASCII或UTF-8字符串,事件类型和地址是一些二进制数据。使用十六进制表示法并打印它
var event_type = buff.slice(3,6).toString('hex'); => '00010a'
这个实现的问题是使用slice()来解析字节流。slice()的参数是索引,而不是字节偏移量。这似乎是一个相当大的缺陷。我不知道为什么在与缓冲区交互时会有人这样做 无论如何,解决方案是以数组的形式访问buff
// event type
var event_type = buff[position].toString('utf8');
position += 1;
console.log('... event type: ' + event_type + ' /');
// address
var addr = buff[position].toString('utf8');
position += 1;
console.log('... addr: ' + addr + ' /');
如果要连接多个字节(原始示例有3个字节长度),则必须循环数组索引。什么不起作用?此外,字段中的数据真的是utf8吗?这些控制台语句中没有打印任何内容。。。我刚刚更新了这个问题,以反映我已经用base64编码的已知文本字符串验证了代码路径的事实。是否打印
。。。事件类型:/
或者什么都不做?对我来说很有用(虽然数据中有奇怪的字节,但只是空格和一个字节)。我发现slice()中使用的参数是索引,而不是字节偏移量。所以我目前的方法根本不起作用。我需要学习如何将base64数据转换为字节流或十六进制值数组,并将它们切碎,以获得数据中的各个字节。