繁体   English   中英

使用Buffer对象解码base64输入

[英]Decoding base64 input with a Buffer object

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

我需要服务器对其进行解码,以便提取字段。 我已经尝试过使用Buffer对象,就像在另一个用例中那样, 数据以十六进制格式传递而没有成功。

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编码的已知文本字符串上使用了相同的代码来验证基本逻辑。 但是,如果源数据在被编码之前是二进制的,则控制台语句不会输出任何内容。 我可以从二进制到base64再到字符串吗?

数据似乎没有有效的ASCII或UTF-8字符串,event_type和addr是一些二进制数据。 使用十六进制表示法并进行打印。

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个字节),则必须遍历数组索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM