这是我第一次发帖,请耐心等待。
我有一个文件,我需要通过重定向读取 header ,我正在使用 cin 捕获字节并存储它们供以后使用。
文件的 hexdump 是:
42 02 02 02 ff 0a 00 00 00 19 00 00 00 ff
我有什么:
char magic, cs1, cs2, cs3, selector;
char temp1, temp2, temp3, temp4;
cin >> magic;
cin >> cs1;
cin >> cs2;
cin >> cs3;
cin >> selector;
//
cin >> temp1;
cin >> temp2;
cin >> temp3;
cin >> temp4;
前5个字节分别代表magicNumber、channelSize、channelSize、channelSize、selectorBit。 接下来的 4 个字节是宽度值,从 LSB 到 MSB 分成 4 个字节。
当我在十六进制为 10(我想要的值)的 0a 上使用 cin 时,它会将其读取为换行符并因此跳过它。
cout << temp1 << endl;
cout << temp2 << endl;
cout << temp3 << endl;
cout << temp4 << endl;
这将包含(十六进制):
0
0
0
19
cin 跳过 0a 并获取下一个值。有没有办法强制它读取 0a?
如果需要更多信息,请告诉我。谢谢
-- 凯尔
最佳答案
这是因为 cin
,这是一个 istream
期望数据是文本。
如果您使用的是二进制数据,那么 istream::get
和 istream::read
是您正在寻找的。p>
std::cin.get(temp1)
std::cin.get(temp2)
std::cin.get(temp3)
std::cin.get(temp4)
从输入流中检索四个字节值。
char buff[4];
std::cin.read(buff, 4);
将为您将数据 block 读入一个字符数组。您可以使用普通整数 如果字节序与数据匹配。
关于C++ 无法让 cin 从文件重定向中读取结束行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346413/