2011-06-17 64 views
2


在個人電腦的世界中,一個字節通常表示計算機視爲一個單元的8位存儲器邊界對齊。在小型和大型計算機等16個32位(分別稱爲全字和雙字)更長的序列也是可能的。

但在遙感世界中,傳感器/檢測器用於通過使用他們自己的輻射測量分辨率例如6位,10位,並測量在從大氣和地球的輻射的強度的變化-12-位。因此,由地面站所捕獲的遙感原始數據圖像總是裝在6位,10位,或12位BCD流的形式。這些數據按掃描線存儲在掃描線中。

我的工作是一種形式的運行結束二進制文件中讀取這種掃描線之一,並儲存了一會兒unsigned char類型源緩衝。對於6位流,我必須擴展到8位(一個字節),和10位或12位流,我會讓他們被縮放無符號短整數。最後,我應該得到一個無符號字符(對於6位)或無符號短目標緩衝區。

請你告訴我該怎麼做? C/C++代碼演示將非常感謝!謝謝。
將6/10/12比特流轉換爲比例無符號字符/ short

10101010 01110101 00011001 
|   | 
----------- 
10-bit BCD 

10101010 01110101 00011001 
     |   | 
     ----------- 
     10-bit BCD 

10101010 01110101 01100110 
     |   | 
     ------------ 
     10-bit BCD 

回答

2

的通常的方法是通過在輸入和輸出之間的比特數之差左移位,則在高位比特從輸入添加到填寫較低位。

unsigned char eightbit = (sixbit << 2) | (sixbit >> 4); 
unsigned short sixteenbit = (tenbit << 6) | (tenbit >> 4); 
unsigned short sixteenbit = (twelvebit << 4) | (twelvebit >> 8); 

有一種替代方法可以用於低位,我沒有經常看到 - 填充噪音。這掩蓋了原始採樣中的一些量化誤差。

unsigned char eightbit = (sixbit << 2) | (sixteenbitnoise >> 14); 
unsigned short sixteenbit = (tenbit << 6) | (sixteenbitnoise >> 10); 
unsigned short sixteenbit = (twelvebit << 4) | (sixteenbitnoise >> 12); 
+0

親愛的馬克,謝謝你的回答。如何從無符號字符數組中提取一個6位/ 10位/ 12位?以10比特分割爲例,顯然,10比特BCD可以選擇跨度2字節或3字節。 – GoldenLee 2011-06-17 06:58:53

相關問題