簡體   English   中英

為什么我的負數沒有在 NodeJS 中正確獲得?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM