[英]Why isn't my negative number properly obtained in NodeJS?
我正在使用 nodeJS 來解析一些 HEX 字符串,我正在嘗試使用 parseInt 將 HEX 值轉換為整數值,但是我遇到了一些關於負數的困難,我不明白原因。
我有以下十六進制字符串D3FFBDFFF900
這種方式D3FFBDFFF900
以下整數x:-0.45*100 y:-0.67*100 z:2.49*100
D3FF | BDFF | F900 => -0.45*100 | -0.64*100 | 2.49*100
我已經創建了以下代碼片段(我現在做的是在那里錯過了 100 的除法)
var x = "D3FFBDFFF900".substring(0,4); var y = "D3FFBDFFF900".substring(4,8); var z = "D3FFBDFFF900".substring(8); console.log("x:"+x); console.log("y:"+y); console.log("z:"+z); console.log("parseInt x "+parseInt(x.toString(16),16)); console.log("parseInt y "+parseInt(y.toString(16),16)); console.log("parseInt z "+parseInt(z.toString(16),16));
為什么 parseInt 不能至少解碼 x=-45、y=-67 和 z=249 的值,而我有上面的輸出?
提前致謝,
編輯:編碼數據的方式如下所示,其中打印只是將原始的十六進制字符串打印到串行總線中
#define NIBBLE_TO_HEX_CHAR(i) ((i <= 9) ? ('0' + i) : ('A' - 10 + i))
#define HIGH_NIBBLE(i) ((i >> 4) & 0x0F)
#define LOW_NIBBLE(i) (i & 0x0F)
for (int i = 0; i < size; ++i) {
print(static_cast<char>(NIBBLE_TO_HEX_CHAR(HIGH_NIBBLE(payload[i]))));
print(static_cast<char>(NIBBLE_TO_HEX_CHAR(LOW_NIBBLE(payload[i]))));
}
並且值x,y,z
如下所示,其中類型為accelerometer.getX() -> double
x = (int16_t)(accelerometer.getX()*100)
y = (int16_t)(accelerometer.getX()*100)
z = (int16_t)(accelerometer.getX()*100)
解析器如何知道您交換了半字節並使用了 4 位十六進制數?
0xD3FF = 15 * 1 + 15 * 16 + 3 * 256 + 13 * 4096 = 54271
-45 = -0x2D
-67 = -0x43
249 = 0xF9
解析器做正確的工作。
要解析接收到的十六進制值,您必須交換高低半字節:
D3FF => FFD3
接下來,您必須將十六進制解析為十進制。 如果您的值 >= 0x8000,則必須反轉二進制表示並加 1
0xFFD3 = 65491 > 0x8000 = 32768
-(~65491 & 0xFFFF) + 1 = -43
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.