C++ ifstream在c+中的位置+;

C++ ifstream在c+中的位置+;,c++,fstream,C++,Fstream,我正在尝试为我的作业编写一个简单的UTF-8解码器。我是C++的新手,所以在这里忍受我…… 我必须确定编码是否有效,并以十六进制输出UTF-8字符的值。假设我已经读取了第一个字节,并使用第一个字节来确定这个UTF8字符中的字节数。问题是,在读取第一个字节后,我无法将ifstream位置设置回一个字节并读取整个UTF-8字符。我试过seekg()和putback(),但我总是得到总线错误或一些奇怪的输出,这些不是我的测试数据。请帮忙,谢谢 尽管我可以对第一个字节使用peek(),但我仍然必须读取以

我正在尝试为我的作业编写一个简单的UTF-8解码器。我是C++的新手,所以在这里忍受我…… 我必须确定编码是否有效,并以十六进制输出UTF-8字符的值。假设我已经读取了第一个字节,并使用第一个字节来确定这个UTF8字符中的字节数。问题是,在读取第一个字节后,我无法将ifstream位置设置回一个字节并读取整个UTF-8字符。我试过seekg()和putback(),但我总是得到总线错误或一些奇怪的输出,这些不是我的测试数据。请帮忙,谢谢


尽管我可以对第一个字节使用peek(),但我仍然必须读取以下字节以确定编码是否有效。设置流位置的问题仍然存在。

我建议您使用peek()来读取第一个字节。seekg()应该可以倒带,但总线错误通常是由代码中断对齐问题引起的,这表明您在代码中做了其他坏事。

我建议您使用peek()来读取第一个字节。seekg()应该可以倒带,但总线错误通常是由代码中断对齐问题引起的,这表明您在代码中做了其他坏事。

为什么必须返回?在知道预期的八位字节数之后,你不能简单地阅读UTF-8序列的其余部分吗?

为什么你必须寻找回来?在知道您还需要多少个八位字节后,您不能简单地读取UTF-8序列的其余部分吗?

我会直接读取下一个字节,并将其添加到我得到的字节中。正如戈拉尔所说。它更干净

无论如何,您可以使用
seekg()
移动流指针:

char字节=0;
无符号整数字符=0;//每一次使用
ifstream文件(“test.txt”,ios::binary);
get(字节);
......
file.seekg(-1,ios::cur);//cur==当前位置
file.get(
重新解释演员阵容和角色,
字节数和零终止符);

cout我会直接读取下一个字节,并将其添加到我得到的内容中。正如戈拉尔所说。它更干净

无论如何,您可以使用
seekg()
移动流指针:

char字节=0;
无符号整数字符=0;//每一次使用
ifstream文件(“test.txt”,ios::binary);
get(字节);
......
file.seekg(-1,ios::cur);//cur==当前位置
file.get(
重新解释演员阵容和角色,
字节数和零终止符);

cout我不知道为什么需要将字符放回原处,但是istream::unget()或istream::putback()应该做您想做的事情。请在编译器的文档中查找它们。

我不知道为什么需要将字符放回原处,但istream::unget()或istream::putback()应该满足您的需要。请在编译器文档中查找它们。

请查找:

ifstream::seekg()
ifstream::teellg()
请查阅:

ifstream::seekg()
ifstream::teellg()

这可能有助于发布一小段代码来演示您所遇到的错误。这可能有助于发布一小段代码来演示您所遇到的错误。我必须以十六进制值输出整个字符。好的,您已经获得了第一个字节。阅读其余内容,并输出所有内容。我不明白你为什么需要返回。我必须以十六进制值输出整个字符。好的,那么你已经得到了第一个字节。阅读其余内容,并输出所有内容。我不明白你为什么要找回来。