2017-08-01 96 views

回答

1

第一步是使用您已經顯示的page上的源代碼來交換字節順序。

然後,您可以將十六進制字符串轉換爲浮點值。

function flipHexString(hexValue, hexDigits) { 
 
    var h = hexValue.substr(0, 2); 
 
    for (var i = 0; i < hexDigits; ++i) { 
 
    h += hexValue.substr(2 + (hexDigits - 1 - i) * 2, 2); 
 
    } 
 
    return h; 
 
} 
 

 

 
function hexToFloat(hex) { 
 
    var s = hex >> 31 ? -1 : 1; 
 
    var e = (hex >> 23) & 0xFF; 
 
    return s * (hex & 0x7fffff | 0x800000) * 1.0/Math.pow(2, 23) * Math.pow(2, (e - 127)) 
 
} 
 

 
console.log(hexToFloat(flipHexString("0x0082d241", 8))); 
 
console.log(hexToFloat(flipHexString("0x5d7e2842", 8)));

+0

遺憾的響應晚,但這總是返回相同的值:26.3134765625無論measurment是。 (我在代碼的最後一行更改了「0x0082d241」 – kots

+0

@kots您的代碼中一定有錯誤我已經在我的答案中添加了一個工作代碼片段,以向您顯示帶有兩個不同十六進制字符串的結果 – Teh

+0

仍然有問題,也許是因爲我用它與節點紅色?這是我如何使用它: ms = msg.payload.data; function flipHexString(hexValue,hexDigits){ var h = hexValue.substr(0,2); 爲(VAR I = 0; I > 31?-1:1; var e =(hex >> 23)& 0xFF; return s *(hex&0x7fffff | 0x800000)* 1.0/Math.pow(2,23)* Math.pow(2,(e-127)); } msg.payload = hexToFloat(flipHexString(ms,8)); return msg; @Teh – kots