gpt4 book ai didi

javascript - 在 Javascript 中读取签名的 16 位数据

转载 作者:行者123 更新时间:2023-11-29 15:18:45 26 4
gpt4 key购买 nike

我一直在努力解决这个问题:

我从嵌入式设备收到原始数据。从文档上看,读入单个值的方式是:

Every two bytes of data can be combined to a single raw wave value.Its value is a signed 16-bit integer that ranges from -32768 to 32767. The first byte of the Value represents the high-order byte of the twos-compliment value, while the second byte represents the low-order byte. To reconstruct the full raw wave value, simply shift the first byte left by 8 bits, and bitwise-or with the second byte.

short raw = (Value[0]<<8) | Value[1];

我收到的 2 个字节之一是“ef”。当我使用上面的按位运算时,结果似乎不正确,因为我注意到我从来没有得到一个负值(它的 ECG 数据,负值是正常的)。我相信使用 Javascript 来做到这一点并不简单。我的做法是这样的:

var raw = "ef"; // just to show one. Actual one is an array of this 2 bytes but in string.
var value = raw.charAt(0) << 8 | raw.charAt(1)

请指教。谢谢!

编辑:

我也是这样做的:

let first = new Int8Array(len); // len is the length of the raw data array
let second = new Int8Array(len);
let values = new Int16Array(len) // to hold the converted value

for(var i=0; i<len ; i++)
{
//arr is the array that contains the every two "characters"
first[i] = arr[i].charAt(0);
second[i] = arr[i].charAt(1);
values[i] = first[i] << 8 | second[i];
}

但仍然一切都是积极的结果。没有消极的。有人可以验证我是否正确地执行此操作,以防万一这些值实际上都是正数:p

最佳答案

您可以使用字符串已经是 16 位的属性,然后对其进行签名。
此外,不是一次读取 8 位,而是使用 charCodeAt 读取一个无符号的 16 位。

var raw = "\u00ef"; //original example
var buf = new Int16Array(1);
buf[0] = raw.charCodeAt(0); //now in the buf[0] is typed 16 bit integer
//returns 239, for \uffef returns -17

var raw = "\uffef"; //original example
var buf = new Int16Array(1);
buf[0] = raw.charCodeAt(0); //now in the buf[0] is typed 16 bit integer
console.log(buf[0])

关于javascript - 在 Javascript 中读取签名的 16 位数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46188757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com