gpt4 book ai didi

c++ - 为什么 ifstream 读取 0x80000000 的 int 失败

转载 作者:行者123 更新时间:2023-11-30 01:17:31 29 4
gpt4 key购买 nike

在一个简单的控制台应用程序中,我试图读取一个文件,该文件的每一行都包含一个十六进制值。

它适用于前几个,但在 4 或 5 之后它开始输出 cdcdcdcd。

知道这是为什么吗?以这种基本方式使用 read 有限制吗?

文件的第一个字节是它的大小。

std::ifstream read("file.bin");

int* data;
try
{
data = new int [11398];
}
catch (int e)
{
std::cout << "Error - dynamic array not created. Code: [" << e << "]\n";
}

int size = 0;
read>>std::hex>>size;
std::cout<<std::hex<<size<<std::endl;

for( int i = 0; i < size; i++)
{
read>>std::hex>>data[i];
std::cout<<std::hex<<data[i]<<std::endl;
}

我得到的返回值为:

576 (size)    
1000323
2000000
1000005
cdcdcdcd
cdcdcdcd
cdcdcdcd
...

要在 cdcdcdcd 位置输出的第一个值是 80000000。

最佳答案

你正在溢出一个 int。

如果改成unsigned int。你将能够填充到 0xFFFFFFFF

您可以检查:

std::cout << "Range of integer: " 
<< std::numeric_limits<int>::max()
<< " <Value> "
<< std::numeric_limits<int>::min()
<< "\n";


std::cout << "Range of integer: "
<< std::numeric_limits<unsigned int>::max()
<< " <Value> "
<< std::numeric_limits<unsigned int>::min()
<< "\n";

注意:没有负的十六进制值(它被设计为位表示的紧凑表示)。

你真的应该检查读取是否有效:

 if (read>>std::hex>>data[i])
{
// read worked
}
else
{
// read failed.
}

关于c++ - 为什么 ifstream 读取 0x80000000 的 int 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234028/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com