2015-02-10 69 views
1

如何将5号数字转换为4字节的字符串,如果要手动输入,则类似于此类似的字符串。将数字转换为4字节的字符串

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

数是分组我需要通过套接字和前4个字节的数据包要发送的大小需要是包的大小(无明显计数的前4个字节)。

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

让我知道如果我没有正确解释自己我从来没有使用过node.js,但我得到了它的挂钩。

+2

您应该使用'Buffer'而不是字符串。 – SLaks 2015-02-10 22:01:29

+0

感谢您的回答我遇到了应该发送TCP数据包的脚本文件的问题,明天我可能会再次回复您,以了解哪种方法更好。 – Starfox64 2015-02-10 23:04:26

回答

1

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

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

console.log(sizeBytes); 
// <Buffer 05 00 00 00> 
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

你可以用做JavaScript Typed arrays,这允许实际的字节级别控制,而不是使用字符串内的字符...

创建ArrayBuffer

var ab = new ArrayBuffer(4); 

使用数据视图来写整进去

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]