C++ ifstream在c+中的位置+;
我正在尝试为我的作业编写一个简单的UTF-8解码器。我是C++的新手,所以在这里忍受我…… 我必须确定编码是否有效,并以十六进制输出UTF-8字符的值。假设我已经读取了第一个字节,并使用第一个字节来确定这个UTF8字符中的字节数。问题是,在读取第一个字节后,我无法将ifstream位置设置回一个字节并读取整个UTF-8字符。我试过seekg()和putback(),但我总是得到总线错误或一些奇怪的输出,这些不是我的测试数据。请帮忙,谢谢C++ ifstream在c+中的位置+;,c++,fstream,C++,Fstream,我正在尝试为我的作业编写一个简单的UTF-8解码器。我是C++的新手,所以在这里忍受我…… 我必须确定编码是否有效,并以十六进制输出UTF-8字符的值。假设我已经读取了第一个字节,并使用第一个字节来确定这个UTF8字符中的字节数。问题是,在读取第一个字节后,我无法将ifstream位置设置回一个字节并读取整个UTF-8字符。我试过seekg()和putback(),但我总是得到总线错误或一些奇怪的输出,这些不是我的测试数据。请帮忙,谢谢 尽管我可以对第一个字节使用peek(),但我仍然必须读取以
尽管我可以对第一个字节使用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()
这可能有助于发布一小段代码来演示您所遇到的错误。这可能有助于发布一小段代码来演示您所遇到的错误。我必须以十六进制值输出整个字符。好的,您已经获得了第一个字节。阅读其余内容,并输出所有内容。我不明白你为什么需要返回。我必须以十六进制值输出整个字符。好的,那么你已经得到了第一个字节。阅读其余内容,并输出所有内容。我不明白你为什么要找回来。