将数字转换为4字节字符串

时间:2015-02-10 22:00:28

标签: javascript node.js

如果要手动输入,我怎样才能将像5这样的数字转换为4字节的字符串,类似于这样的字符串。

var size = "\00\00\00\05";

数字是我需要通过套接字发送的数据包的大小,数据包的前4个字节需要是数据包的大小(显然不计算前4个字节)。

var size = "\00\00\00\05";
var packet = size + "JSON_STRING";

请告诉我,如果我没有正确解释自己,我以前从未使用过node.js,但我已经掌握了它。

3 个答案:

答案 0 :(得分:2)

您可以使用JavaScript Typed arrays执行此操作,这允许实际的字节级控制,而不是使用字符串中的字符...

创建一个ArrayBuffer

var ab = new ArrayBuffer(4);

使用DataView将整数写入其中

var dv = new DataView(ab);
dv.setInt32(0, 0x1234, false); // <== false = big endian

现在您可以将ArrayBuffer作为无符号字节数组

var unit8 = new Uint8Array(ab);

输出

console.log(unit8);
[0, 0, 18, 52]

答案 1 :(得分:1)

一个明显的变体是:

var size = 5;
var b1 = size & 0xff;
var b2 = (size>>>8) & 0xff;
var b3 = (size>>>16) & 0xff;
var b4 = (size>>>24) & 0xff;
var sizeString = String.fromCharCode(b1, b2, b3, b4);

非常重要的注意事项 - 根据b1-b4的架构顺序可能会有所不同,它被称为Endianness,可能需要b4, b3, b2, b1

答案 2 :(得分:1)

使用节点的Buffer而不是字符串。字符串用于字符,缓冲区用于字节:

var size = 5;
var sizeBytes = new Buffer(4);
sizeBytes.writeUInt32LE(size, 0);

console.log(sizeBytes);
// <Buffer 05 00 00 00>