2012-04-12 232 views
1

我已经在这了一点,我是新来与JS编程。我正在使用JS,HTML5,节点和socket.io制作游戏。我正在使用协议,我正在发送十六进制的服务器字符串。转换一个十六进制字符串成字节数组JS

字符串的一个例子是:00010203040506070809

我有一个很难将其转换为:0×00 0×01 0×02×03 0×04 0×05 0×06 0×07 0×08×09

我打算做的是这些自定义数据包并在我的服务器上根据数据包开关。例如:

BYTE HEADER | + Packet 
0x00  | 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 

然后我调用:parsepacket(header,data,len);

function parsepacket(header, data, len){ 
switch(header) 
{ 
case '0x00': // not hexed 
console.log('The client wants to connect'); 
// Do some stuff to connect 
break; 

case '0x01': 
console.log('0x01'); 
break; 

case '0x02': 
console.log('0x02!'); 
break; 
} 
}; 

有没有人知道如何做到这一点?

+0

这可能是有用的:http://nodejs.org /api/buffer.html – 2012-04-12 10:12:35

回答

7

我不知道这是你以后,但你可以将字符串转换为十六进制值的数组是这样的:

var str = "00010203040506070809", 
    a = []; 

for (var i = 0; i < str.length; i += 2) { 
    a.push("0x" + str.substr(i, 2)); 
} 

console.log(a); // prints the array 
console.log(a.join(" ")); // turn the array into a string of hex values 
​console.log(parseInt(a[1], 16));​ // parse a particular hex number to a decimal value 
+0

那正是我想要的!好样的! :-) – user1328762 2012-04-12 10:30:44

+0

您不需要在十六进制值前添加'0x'来解析它。 – Supersharp 2015-10-26 09:17:15

相关问题