Как получить вход из файла raw12 в cpp? Я пытался открыть его в двоичном режиме, чем с помощью getline и отображения, но не сработало? - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть файл raw-12, я хочу взять 12-битный ввод за раз, а затем преобразовать его в 8-битный в c ++.
Вот как я принимаю данные.

int main()
{   
     string s;
     fstream f ("pagan.raw12", std::ios::binary|std::ios::in);
     if (!f)
         std::cout<<"\n oops!! file does not exit";
     else
         std::cout<<"\n ready to go!!"

     std::cin.ignore();

     getline(cin,s);

     std::cout<<s;

     f.close();

     return 0;
}

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете прочитать 3 байта из вашего потока следующим образом:

unsigned char buf[3];

f.read(reinterpret_cast<char*>(buf), 3);

Тогда у вас будет 3 байта, как показано красным:

enter image description here

Вам нужны два новых 12-битных семпла, показанных синим цветом, с пометкой n0 и n1:

enter image description here

Но вы хотите уменьшить их до 8-битных, поэтому вам нужно отбросить младшее 4-битное шоу зеленого цвета с метками d0 и d1. Это оставит вас с двумя новыми 8-битными семплами, показанными пурпурным и помеченными a0 и a1:

a0 =  b[0];
a1 = (b[1] & 0xf) << 4) | ((b[2] >> 4) & 0xf);
...