簡體   English   中英

JavaScript十六進制字符串到IEEE-754浮點數

[英]JavaScript Hexadecimal string to IEEE-754 Floating Point

為了解決這個問題,我在Stackoverflow周圍待了幾天,並在JsFiddle中玩了一段時間,但到目前為止還沒有運氣。

這是我的問題:我收到一個base64編碼的字符串,其中包含多個值。 無符號整數和浮點數。 可以將base64解碼為十六進制字符串。 無符號整數也是如此。 問題在於解碼浮點數。

b76a40e9000000350a3d422d00000059e37c409a0000002f90003b6e00000000

這是我的數據,例如很好地使用前32位,是IEE-754浮點數,字節順序為1-0-3-2 所以這就是0xb76a40e9 ,我知道是7.30363941192626953125 ,當我們將其交換為3-2-0-1它變為0x40e9b76a 當我將此十六進制字符串放入已確認的https://www.h-schmidt.net/FloatConverter/IEEE754.html中時。

我的問題是,如果在javascript中有一種將十六進制IEEE-754浮點字符串轉換為javascript浮點的實現,我會搜索很長時間。 JS自己的parseInt將接受十六進制,但是由於某種原因parseFloat不會嗎?

任何輸入都將不勝感激,到目前為止,人們編寫的所有代碼示例所產生的數字均與我預期的不同。

使用DataView從單詞解壓縮浮點數:

> v = new DataView(new ArrayBuffer(4))
> v.setUint32(0, 0x40e9b76a)
> v.getFloat32(0)
7.3036394119262695

(推薦使用Uint32ArrayFloat32Array因為它不繼承平台的字節序。)

您還可以使用它來交換兩個16位單元:

> v.setUint32(0, 0xb76a40e9)
> ((hi, lo) => {
    v.setUint16(0, hi);
    v.setUint16(2, lo);
  })(v.getUint16(2), v.getUint16(0))
> v.getUint32(0).toString(16)
'40e9b76a'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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