преобразование байта в бит - PullRequest
2 голосов
/ 22 февраля 2010

В настоящее время я работаю над Visual C ++ 2008 Express Edition. Мой проект основан на чтении спутниковых изображений и применении обработки изображений на них. Каждый файл изображения имеет формат ".0FM" и имеет размер 8 МБ.

До сих пор я мог читать файл (т.е. "* .0FM"), используя FileStream, и в байтовый массив, размер байтового массива составляет 8 000 000.

Затем я преобразовал каждый элемент массива байтов в десятичный, поэтому теперь каждый элемент в массиве имеет значения в диапазоне от 0 до 255. Теперь мне нужно преобразовать каждое из этих десятичных значений в массиве в его двоичные значения. Например, 86 следует преобразовать в 1010110

Я действительно застрял здесь. Я попробовал System::Decimal::GetBits() метод, но все, что делает этот метод, это то, что он хранит 86 в битах [0],

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

Этот код приводит к сохранению значения 86 в buf_bits [0], я не получаю 1010110.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2010

Во-первых, если ваши значения находятся в диапазоне от 0 до 255, вы должны использовать байт (или символ без знака). Затем необходимо использовать операторы Shift left / Shift right.

в коде 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;
}
0 голосов
/ 22 февраля 2010

Вы никогда не работаете с битами напрямую. Оставьте их как байты. Если вам нужно проверить флаги или что-то еще, используйте что-то вроде следующего метода:

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