2017-03-06 113 views
0

我想要一个整数存储到node.js的缓冲,然后将其通过bleno发送到客户端:如何将Node.js缓冲区转换为客户端的整数?

var num = 24; 
var buf = new Buffer(1); 
buf.writeUInt8('0x' + num, 0); 
//send buf using bleno 

然后,我下面将它转换为字符串在客户端代码:

function bytesToString(buffer) {  
    return String.fromCharCode.apply(null, new Uint8Array(buffer)); 
} 

问题是我没有得到原始值(24)。相反,它返回的是'#'字符串。 我也试过这里的解决方案:Converting between strings and ArrayBuffers但我要么得到中文或unicode字符。

下面是我在Node.js的侧以前做的和它的作品没有与上述bytesToString功能的任何问题:

new Buffer(num.toString()); 

但条件所规定,我应该送整数或浮点数而不转换它串起来。这可能吗?任何想法我做错了什么?提前致谢。

回答

2

当你这样做:

buf.writeUInt8('0x' + num, 0); 

你是它通过与'0x' + num另一个字符串连接它,无论你以后做什么已转换为字符串,它已经被转换成字符串在此点 - 可能是错误的字符串,因为您预先将十六进制前缀添加到默认情况下转换为小数的数字。

你在这里做什么是一个非常复杂和不正确的方式序列化的数字,可以很容易地转移为JSON。

+0

那么你建议我会做什么?当使用bytesToString()函数时,使用'buf.writeUInt8(0x24,0)'将字符改为'$'。 –

+0

@WernAncheta这是正确的,因为0x24是“$”字符的ASCII值。当您稍后将该缓冲区转换为字符串时,您将获得符合您预期的美元符号。我会建议使用JSON或XML或其他一些经过良好测试的序列化,而不是发明自己的,特别是当你遇到问题时。 – rsp

+0

感谢您的回复,我非常感谢。问题是这些值是使用蓝牙低能量发送的,并且是以特定的时间间隔发送的,所以我无法真正使用JSON或XML。如果它的ASCII码相当,我想我正走在正确的轨道上。你如何建议我恢复原来的价值?我只是发现这个:http://stackoverflow.com/questions/20580045/javascript-character-ascii-to-hex我认为它应该工作。 –

相关问题