Javascript 如何在客户端将Node.js缓冲区转换为整数?

Javascript 如何在客户端将Node.js缓冲区转换为整数?,javascript,node.js,Javascript,Node.js,我正在尝试将整数存储到node.js缓冲区中,然后通过以下方式将其发送到客户端: 然后,我在客户端使用以下代码将其转换为字符串: function bytesToString(buffer) { return String.fromCharCode.apply(null, new Uint8Array(buffer)); } 问题是我没有得到原始值(24)。相反,它返回的是“#”字符串。 我也在这里尝试了解决方案:但我要么使用中文字符,要么使用unicode字符 以下是我之前在No

我正在尝试将整数存储到node.js缓冲区中,然后通过以下方式将其发送到客户端:

然后,我在客户端使用以下代码将其转换为字符串:

function bytesToString(buffer) {    
  return String.fromCharCode.apply(null, new Uint8Array(buffer));
}
问题是我没有得到原始值(24)。相反,它返回的是“#”字符串。 我也在这里尝试了解决方案:但我要么使用中文字符,要么使用unicode字符

以下是我之前在Node.js端所做的工作,它与上面的bytesToString函数没有任何问题:

new Buffer(num.toString());

但是要求指定我应该发送整数或浮点,而不将其转换为字符串。这可能吗?你知道我做错了什么吗?提前感谢。

当您执行此操作时:

buf.writeUInt8('0x' + num, 0);
您已经在将它与
'0x'+num
中的另一个字符串连接起来,从而将其转换为字符串。因此,无论您稍后做什么,此时它都已转换为字符串-可能转换为错误的字符串,因为您正在将十六进制前缀预加为默认转换为十进制的数字


您在这里所做的是一种非常复杂且不正确的序列化数字的方法,很容易将其转换为JSON。

当您这样做时:

buf.writeUInt8('0x' + num, 0);
您已经在将它与
'0x'+num
中的另一个字符串连接起来,从而将其转换为字符串。因此,无论您稍后做什么,此时它都已转换为字符串-可能转换为错误的字符串,因为您正在将十六进制前缀预加为默认转换为十进制的数字


您在这里所做的是一种非常复杂且不正确的序列化数字的方法,很容易将其转换为JSON。

那么您建议我怎么做?当使用bytesToString()函数时,使用
buf.writeUInt8(0x24,0)
将字符改为“$”。@WernAncheta没错,因为0x24是
“$”字符的ASCII值。稍后,当您将该缓冲区转换为字符串时,您将得到您所期望的美元符号。我的建议是使用JSON或XML或其他经过良好测试的序列化,而不是发明自己的序列化,特别是当您在这方面遇到问题时。感谢您的回复,我非常感谢。问题是这些值是使用蓝牙低能量发送的,并且以特定的间隔发送,因此我不能真正使用JSON或XML。如果它是ASCII等价物,我想我是在正确的轨道上。你建议我如何从中获取原始值?我刚刚发现:我认为它应该有效。那么你建议我怎么做?当使用bytesToString()函数时,使用
buf.writeUInt8(0x24,0)
将字符改为“$”。@WernAncheta没错,因为0x24是
“$”字符的ASCII值。稍后,当您将该缓冲区转换为字符串时,您将得到您所期望的美元符号。我的建议是使用JSON或XML或其他经过良好测试的序列化,而不是发明自己的序列化,特别是当您在这方面遇到问题时。感谢您的回复,我非常感谢。问题是这些值是使用蓝牙低能量发送的,并且以特定的间隔发送,因此我不能真正使用JSON或XML。如果它是ASCII等价物,我想我是在正确的轨道上。你建议我如何从中获取原始值?我刚刚发现:我认为它应该有效。