Данные, передаваемые в вашей функции, являются объектом Buffer. он может содержать любые двоичные данные.
Предположим, что полученный пакет - это простая структура c, подобная этой,
typedef struct _SOME_PACKET
{
unsigned short nLen; //2byte
char szSomeMSg [16];
} SOME_PACKET;
тогда первые 2 байта данных являются двоичными данными. и вы можете получить целое число методом Буфера.
var littleEndianInt = data.readUInt16LE(0);
//or
var bigEndianInt = data.readUInt16BE(0);
Чтобы получить остальные данные после 2 байтов, вы можете использовать смещение.
var restOfDataExceptInt = new Buffer( data.length - 2 );
restOfDataExceptInt.fill();
data.copy( restOfDataExceptInt, 0, 2, data.length );
какой endian использовать? это зависит от того, какой порядковый номер использует ваш компьютер.
[система с прямым порядком байтов]
- Linux на x86, x64, Alpha и Itanium
- Mac OS X на x86, x64
- OpenVMS на VAX, Alpha и Itanium
- Solaris на x86, x64, PowerPC
- Tru64 UNIX на Alpha
- Windows на x86, x64 и Itanium
[система с прямым порядком байтов]
- AIX on POWER
- AmigaOS на PowerPC и 680x0
- HP-UX на Itanium и PA-RISC
- Linux на MIPS, SPARC, PA-RISC, POWER, PowerPC, 680x0, ESA / 390 и
г / Архитектура
- Mac OS на PowerPC и 680x0
- Mac OS X на PowerPC
- MVS и DOS / VSE на ESA / 390, а также z / VSE и z / OS на z / Architecture
- Солярис на SPARC
Также обращайтесь к этому:
https://github.com/jeremyko/nodeChatServer
Надеюсь, это поможет.