2016-08-01 82 views
-2

我有一個10比特的SDI流,當我收到它時,它將被存儲到uint8_t *buffer並偏離當然,當我讀它時,我得到與預期完全不同的值,除了第一個:將10Bit緩衝區映射到8Bit

10Bit - > 00 0000 0001 | 00 0101 1010→Hex:A5 10

8位 - > 0000 | 0000 0100 | 0101 1010→十六進制:A5 40

有沒有一個函數可以用來正確映射它? (C++風格)

如果它不存在,我該如何實現它?

+0

10位值爲'001 05A',8位是'0 04 5A',你如何得到'A5 10'和'A5 80'? –

+0

*是否有一個函數可以用來正確映射它? (C++風格)*不是我所知道的。你可能必須自己寫一個。這個問題是類似的:http://stackoverflow.com/questions/11680248/reading-a-binary-file-bit-by-bit –

+0

是的抱歉,我從右到左讀,因爲第一個值是來自流是正確的,當然8Bit值將是4而不是8,我會糾正它,但問題不會改變,即使它是相反的方式我讀錯誤的值,是否有一個函數來轉換它? – mattobob

回答

0

基本上,您需要使用fread()以及正確的參數將5個字節(即40位)讀入臨時緩衝區。您使用該數量是因爲它對應於輸入流上的整數個字節以及輸出流上的整數個輸出字節。

然後,您可以使用左,右移位(<<>>)和位掩碼(&)提取5個輸出字節,並把它們放在你的uint8_t緩衝區。

相關問題