【问题标题】:How to convert Node.js buffer to integer in the client-side?如何在客户端将 Node.js 缓冲区转换为整数?
【发布时间】:2017-07-26 05:16:51
【问题描述】:

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

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());

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    当你这样做时:

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

    您已经通过将其与'0x' + num 中的另一个字符串连接将其转换为字符串,因此无论您稍后做什么,此时它都已转换为字符串 - 可能转换为错误的字符串,因为您在前面添加默认情况下转换为十进制的数字的十六进制前缀。

    您在这里所做的是一种非常复杂且不正确的序列化数字的方法,该数字可以轻松传输为 JSON。

    【讨论】:

    • 那么你建议我怎么做?当使用 bytesToString() 函数时,使用 buf.writeUInt8(0x24, 0) 将字符更改为 '$'。
    • @WernAncheta 没错,因为 0x24 是 '$' 字符的 ASCII 值。当您稍后将该缓冲区转换为字符串时,您会得到预期的美元符号。我的建议是使用 JSON 或 XML 或其他一些经过良好测试的序列化,而不是自己发明,尤其是当你遇到问题时。
    • 感谢您的回复,非常感谢。问题是这些值是使用蓝牙低能量发送的,并且以特定的间隔发送,所以我不能真正使用 JSON 或 XML。如果它是 ASCII 等价物,我想我走在正确的轨道上。您如何建议我从中取回原始价值?我刚刚找到了这个:stackoverflow.com/questions/20580045/… 我认为它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2019-10-06
    • 2014-07-13
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多