2

我目前正在開發visual C++ 2008 express版本。我的項目基於閱讀衛星圖像並對其應用圖像處理。 每個圖像文件都有一個「.0FM」格式,大小爲8Mb。將字節轉換爲位

到現在爲止,我已經能夠使用FileStream讀取文件(即「* .0FM」)並且讀入Byte數組,字節數組的大小爲8,000,000。

然後,我將字節數組中的每個元素都轉換爲Decimal,因此現在數組中的每個元素的值都在0 - 255之間。 現在,我必須將數組中的每個Decimal值轉換爲其二進制值。 例如,86應該轉換成1010110

我真的被困在這裏。我試過System::Decimal::GetBits()方法,但所有這種方法並是它可以儲存86到比特[0],

Decimal d = 86; 
array<int>^ buf_bits = Decimal::GetBits(d); 

在價值86 buf_bits存儲該代碼產生[0],我沒有得到1010110.

+2

你能請解釋一下爲什麼你需要的位:

在僞代碼,其中num是您的0-255字節

?看起來你正在做一件很奇怪的事情。 – Drakosha 2010-02-22 07:53:45

回答

0

您不會直接使用這些位。將它們保留爲字節。如果你需要檢查標誌或使用的東西有點像以下技術:

byte mask = 8; 
if(myFileData[SomeIndex] & mask > 0) 
    // Bit in 4th position is "ON"; 
0

首先,如果你值範圍從0到255,你應該使用字節(或無符號字符)。 比,你需要使用Shift左/ Shift右操作符。

mask = 1b; 
bits = new array[sizeof(BYTE)]; 
for (i=0; i < sizeof(BYTE); i++) 
{ 
    tmp = num & mask; 
    bits[i] = tmp >> i; 
    mask = mask << 1; 
} 
+0

嗨,其實我必須在picturebox控件中顯示這些字節值。所以,我想如果我將字節值轉換成位,那麼它可能很容易在picturebox控件中顯示字節值.. – JAYMIN 2010-02-22 08:23:58

+0

在位數組中,您有0和1。以任何你想要的方式使用它們。直接打印到圖片框可能很困難,因爲您需要一個圖像,其像素代表圖形0和1。 – sagie 2010-02-22 09:52:04