C++ 从包含以随机字符c++;?
我试图从一个包含二进制数的文件中读取并将其更改为整数,然后将其存储在数组中。问题是当我试图查看文件时,这些数字被伪装成随机的无意义字符。这是文件的外观 \æFQÆ3QËDO':^C2-%M “MÚUWæB5q'r2ø7grh-6aï4bï!”$伊姆|BW@0U二进制数据不是字符。不能将它们作为字符读取,也不能使用字符串输入(如C++ 从包含以随机字符c++;?,c++,C++,我试图从一个包含二进制数的文件中读取并将其更改为整数,然后将其存储在数组中。问题是当我试图查看文件时,这些数字被伪装成随机的无意义字符。这是文件的外观 \æFQÆ3QËDO':^C2-%M “MÚUWæB5q'r2ø7grh-6aï4bï!”$伊姆|BW@0U二进制数据不是字符。不能将它们作为字符读取,也不能使用字符串输入(如std::getline)从文件中读取 首先,应以二进制模式打开文件: 然后使用非匹配的非文本函数读取,例如: std::int32_t缓冲区[512]; 而(infle.
std::getline
)从文件中读取
首先,应以二进制模式打开文件:
然后使用非匹配的非文本函数读取,例如:
std::int32_t缓冲区[512];
而(infle.read(reinterpret_cast(buffer),sizeof(buffer)){…}
如果读取操作成功,您将拥有一个最多512个32位整数的数组(用于确定读取了多少字节)
还要注意在循环中读取的惯用方法。如果执行此操作(例如,而(!infle.eof())
),则可能会尝试一次到多次读取,因为只有在读取操作失败后才会设置eof标志
如果您不知道文件中数据的格式,则很难说上述读取是否正确。数据可能是包含8到64位值、浮点值甚至实际文本字符的混合结构。二进制数据不是字符。您不能将其作为字符读取,也不能使用字符串输入(如
std::getline
)从文件中读取
首先,应以二进制模式打开文件:
然后使用非匹配的非文本函数读取,例如:
std::int32_t缓冲区[512];
而(infle.read(reinterpret_cast(buffer),sizeof(buffer)){…}
如果读取操作成功,您将拥有一个最多512个32位整数的数组(用于确定读取了多少字节)
还要注意在循环中读取的惯用方法。如果执行此操作(例如,而(!infle.eof())
),则可能会尝试一次到多次读取,因为只有在读取操作失败后才会设置eof标志
如果您不知道文件中数据的格式,则很难说上述读数是否正确。数据可能是包含8到64位值、浮点值甚至实际文本字符的混合结构。您需要以二进制文件的形式打开该文件。您正在以文本文件的形式打开它。请看这里:
查看ios::binary部分。您需要以二进制文件的形式打开该文件。您正在以文本文件的形式打开它。请查看此处:
看看ios::binary部分。您有关于该文件的更多信息吗?我猜该文件中填充了32位或64位数字(每个占4或8字节).Binary文件存储信息非常紧凑,但您需要知道它的格式,以便能够读取它。以字符形式查看原始信息毫无帮助,因为它实际上不是字符,只是数字。您创建了文件吗?我没有创建文件,提供的唯一信息是该文件“包含一组二进制数字”就是这样。您有关于该文件的更多信息吗?我猜该文件中填充了32位或64位数字(每个数字占用4或8个字节).二进制文件存储信息非常紧凑,但您需要知道它的格式,以便能够读取它。以字符形式查看原始信息毫无帮助,因为它实际上不是字符,只是数字。您创建了文件吗?我没有创建文件,提供的唯一信息是文件“包含一组二进制数“就是这样。此外,您可能需要提及他正在做的其他事情,例如调用
getline()
和atoi()
。此外,您可能需要提及他正在做的其他事情,例如调用getline()
和atoi()
。谢谢你的回答。我现在就来试试!我很感激这一课!谢谢你的回答。我现在就来试试!我很感激这一课!
void readf2()
{
std::ifstream inFile("f2");
std::string line;
int num;
while(!inFile.eof()){
std::getline(inFile,line);
num = atoi(line.c_str());
cout<<num;
cout<<"\n";
}
}
std::ifstream inFile("f2", std::ios_base::binary);
std::int32_t buffer[512];
while (inFile.read(reinterpret_cast<char*>(buffer), sizeof(buffer)) { ... }