用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个字节长度),您必须遍历数组索引。
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 名称输入的索引
- 如何编写HTML输入的JS内联
- 要求输入在数据列表中
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何将 Base64 字符串转换为 javascript 文件对象,就像从文件输入表单一样
- 编码然后在 base64 中解码不会输出我的输入数组缓冲区
- 输入中带有base64编码图像的POST的Chrome内存泄漏 - 如何解决
- 使类型字段的输入以base64而不是二进制形式发送数据
- 将文件从js发送到作为base64的c#webapi.输入不是有效的Base-64字符串
- 输入类型=“file"设置base64图像数据
- 用Buffer对象解码base64输入
- 如何将base64编码的字符串转换为要上传为图像的文件输入
- 将用户输入的图像转换为base64时出现错误
- 从输入表单中获取Base64编码文件数据
- 如何将base64图像转换为html输入文件标记
- 编码十六进制(或base64)输入到base32输出,解码base32输入到十六进制/base64 -寻找Javascr