Fork me on GitHub

nodejs的ByteBuffer,和C++通信的利器!

原创文章,未经允许,请勿转载

昨天晚上花了点时间,把目前项目里用的AS3版本的ByteBuffer整合到nodejs中。

项目中需要和C++通信总是让我们和二进制打交道。我们需要的是一种二进制打包和解包工具,不需要直接面对二进制流。

项目主页://play175.github.com/ByteBuffer/

代码:https://github.com/play175/ByteBuffer

示例:

var ByteBuffer = require('./ByteBuffer'); 

/*************************基本操作****************************/ 

//压包操作 
var sbuf = new ByteBuffer(); 
var buffer = sbuf.string('abc123你好')//变长字符串,前两个字节表示长度 
                       .int32(-999).uint32(999).float(-0.5) 
                       .int64(9999999).double(-0.000005).short(32767).ushort(65535) 
                       .byte(255) 
                       .vstring('abcd',5)//定长字符串,不足的字节补0x00 
                       .pack();//结尾调用打包方法 

console.log(buffer); 

//解包操作 
var rbuf = new ByteBuffer(buffer); 
//解包出来是一个数组 
var arr = rbuf.string()//变长字符串,前两个字节表示长度 
                    .int32().uint32().float() 
                    .int64().double().short().ushort() 
                    .byte() 
                    .vstring(null,5)//定长字符串,不足的字节补0x00 
                    .unpack();//结尾调用解包方法 

console.log(arr); 


/*************************更多操作****************************/ 

//指定字符编码(默认:utf8):utf8/ascii/ 
var sbuf = new ByteBuffer().encoding('ascii'); 

//指定字节序(默认:BigEndian) 
var sbuf = new ByteBuffer().littleEndian(); 

//指定数据在二进制的初始位置 默认是0 
var sbuf = new ByteBuffer(buffer,2); 

//插入数据到指定位置 
var sbuf = new ByteBuffer(); 
sbuf.int32(9999,0);//把这个int32数据插入到ByteBuffer的第一个位置 

//在打包的时候在开始位置插入一个short型表示包长(通信层中的包头) 
var buffer = sbuf.pack(true); 

NPM安装:

npm install ByteBuffer -g 

来源:悠游悠游,原文地址:https://yymmss.com/p/nodejs-bytebuffer.html