如何从cpp中的raw12文件中获取输入?我尝试在二进制模式下打开它而不是使用getline和显示但是不起作用?

问题描述 投票:0回答:1

我有一个raw-12文件,我想一次输入12位,然后在c ++中将其转换为8位。 这是我如何接受输入。

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;
}
c++ c++11 c++14 file-handling
1个回答
0
投票

您可以从流中读取3个字节,如下所示:

unsigned char buf[3];

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

那么你将有3个字节,如红色所示:

enter image description here

您希望两个新的12位样本以蓝色显示,标记为n0n1

enter image description here

但是你想将它们减少到8位,所以你需要丢弃绿色的最低4位显示,标记为d0d1。这将为您留下两个新的8位样本,以洋红色显示并标记为a0a1

a0 =  b[0];
a1 = (b[1] & 0xf) << 4) | ((b[2] >> 4) & 0xf);
© www.soinside.com 2019 - 2024. All rights reserved.