Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用缓冲区对象解码base64输入_Javascript_Node.js_Base64_Decoding - Fatal编程技术网

Javascript 使用缓冲区对象解码base64输入

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

我有一个客户端接口,它发送用base64编码的二进制数据。数据是描述事件的29字节自定义格式的字节有效负载。29字节由多个字段组成;每个都有独特的长度

我需要服务器对其进行解码,以便提取字段。我已经尝试使用该对象,就像我在另一个用例中使用该对象一样,但是没有成功

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数据转换为字节流或十六进制值数组,并将它们切碎,以获得数据中的各个字节。