2

現在、Visual C++ 2008 Express Edition に取り組んでいます。私のプロジェクトは、衛星画像を読み取り、それらに画像処理を適用することに基づいています。各画像ファイルは「.0FM」形式で、サイズは 8Mb です。

これまで、FileStream を使用してファイル (つまり、 "*.0FM" ) をバイト配列に読み取ることができました。バイト配列のサイズは 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 が得られません。

4

2 に答える 2

0

まず、値の範囲が0〜255の場合は、byte(またはunsigned char)を使用する必要があります。それよりも、左シフト/右シフト演算子を使用する必要があります。

psuedoコードでは、numは0〜255バイトです。

mask = 1b;
bits = new array[sizeof(BYTE)];
for (i=0; i < sizeof(BYTE); i++)
{
    tmp = num & mask;
    bits[i] = tmp >> i;
    mask = mask << 1;
}
于 2010-02-22T08:17:10.330 に答える
0

ビットを直接操作することはありません。それらをバイトのままにしておきます。フラグなどをチェックする必要がある場合は、次のような手法を使用します。

byte mask = 8;
if(myFileData[SomeIndex] & mask > 0)
   // Bit in 4th position is "ON";
于 2010-02-22T07:58:04.250 に答える