C++ 无法让 cin 从文件重定向中读取结束行字符

标签 c++ hex newline cin

这是我第一次发帖,请耐心等待。

我有一个文件,我需要通过重定向读取 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::getistream::read是您正在寻找的。

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/

相关文章:

C if 语句无法检测新行

c - 位运算混淆

javascript - 使用空白 :nowrap is one line in IE 在 PRE 中美化突出显示

c++ - 没有重复的随机数组生成

c++ - 嵌套模板特化结果为 "Illegal use of explicit template arguments"?

C语言 : read in hex from file to populate array

c# - C# 中的 float 到十六进制

jquery - 在字符串中使用新行 (\n) 并在 HTML 中呈现相同的内容

c++ - 如何在 mac 中使用 make 和 make install

c++ - 开关错误::不能出现在常量表达式中