2017-06-06 84 views
1

我在Python 3.6中遇到了數字格式問題。我的目標是將文件中的二進制數據轉換爲可打印的十進制數字。舉個例子,我需要將兩個小端字節轉換成字節字符串的形式...python中的定點二進制解包

B「\ X12 \ 00」

到其大端二進制形式...

最後到其16-bit fixed-point Q15十進制數形式...

(1/4096)+ (1/16384)= 0.00030517578(基本上,我們已經使2字節高於人類可讀)

在我失敗的嘗試中,struct.unpack函數看起來很有前途,但我的低級/數字表示體驗只是目前還不是很成熟。

失敗的嘗試:

struct.unpack('<h', b'\x12\x00') # Yields (18,) 

上面的代碼讓我「18」,如果該字節表示一個整數,將被罰款,但他們沒有。

任何幫助/意見,將不勝感激。謝謝!已經由15個比特移位 -

+1

字節確實表示一個整數 - 已被移位15位。除以32768(2 ** 15)得到實際的Q15值。 (這與您計算的值不符,但那是因爲您做了錯誤的數學計算 - 兩組比特實際上具有1/2048和1/16384的位置值。) – jasonharper

+0

@jasonharper你說的對 - 很好!你的解決方案有效,我相信我理解你的方法。謝謝! –

回答

1

在問題comments--

的字節做代表整數回答@jasonharper。除以32768(2 ** 15)得到實際的Q15值。 (這不符合您所計算出的值,但是那是因爲你做的數學錯了 - 這兩組位實際上有1/2048和一萬六千三百八十四分之一的位值)。

我通過實現應有的價值以下代碼 -

struct.unpack('<h', b'\x12\x00')[0]/(2**15)