gpt4 book ai didi

c++ - 读取 64 位整数文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:07 24 4
gpt4 key购买 nike

我正在尝试通过自己编写一些代码来学习 C++,并且在这个领域非常新。

目前,我正在尝试读写一个 64 位整数文件。我用以下方式编写 64 位整数文件:

ofstream odt;
odt.open("example.dat");
for (uint64_t i = 0 ; i < 10000000 ; i++)
odt << i ;

任何人都可以帮助我如何读取那个 64 位整数文件(一个一个地)吗?所以,我发现的例子都是逐行读取的,而不是一个一个整数。

编辑:

ofstream odt;
odt.open("example.dat");
for (uint64_t i = 0 ; i < 100 ; i++)
odt << i ;

odt.flush() ;

ifstream idt;
idt.open("example.dat");
uint64_t cur;
while( idt >> cur ) {
cout << cur ;
}

最佳答案

如果您必须使用文本文件,您需要一些东西来描述格式化值的分隔。空格例如:

ofstream odt;
odt.open("example.dat");
for (uint64_t i = 0 ; i < 100 ; i++)
odt << i << ' ';

odt.flush() ;

ifstream idt;
idt.open("example.dat");
uint64_t cur;
while( idt >> cur )
cout << cur << ' ';

话虽如此,我强烈建议您使用较低级别的 iostream 方法(write()read())并编写这些二进制。

使用读/写和二进制数据的示例(是否有 64 位 htonl/ntohl equiv btw??)

ofstream odt;
odt.open("example.dat", ios::out|ios::binary);
for (uint64_t i = 0 ; i < 100 ; i++)
{
uint32_t hval = htonl((i >> 32) & 0xFFFFFFFF);
uint32_t lval = htonl(i & 0xFFFFFFFF);
odt.write((const char*)&hval, sizeof(hval));
odt.write((const char*)&lval, sizeof(lval));
}

odt.flush();
odt.close();

ifstream idt;
idt.open("example.dat", ios::in|ios::binary);
uint64_t cur;
while( idt )
{
uint32_t val[2] = {0};
if (idt.read((char*)val, sizeof(val)))
{
cur = (uint64_t)ntohl(val[0]) << 32 | (uint64_t)ntohl(val[1]);
cout << cur << ' ';
}
}
idt.close();

关于c++ - 读取 64 位整数文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540136/

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