提问人:samuraiJackDavidson 提问时间:6/1/2021 更新时间:6/1/2021 访问量:79
如何使用“cstdint”库中的固定大小的整数来存储/打包最大长度为 250MB 的位数据序列?为什么不使用普通的 int?
How do i use the fixed sized integers from 'cstdint' lib to store/pack bit data sequence with maximum length of 250MB? Why to not use normal int?
问:
在我正在执行的任务中,我被特别告知: “C++ 中的整数没有固定大小。要访问具有固定大小的整数,可以使用库 cstdint。 我认为建议我使用固定大小的整数来打包位数据(最大 250MB)。我不明白固定大小的 int 在这种情况下有什么帮助?如何使用这些固定大小的整数?我想我可能应该声明一个结构,但我完全不确定。 谢谢!
答:
0赞
Gabbergabbo
6/1/2021
#1
c++ 中的整数不是固定大小的,因为它们可以根据 arch 或其他环境变量(操作系统、编译器等)具有不同的大小。
库 cstdint 公开了保证大小固定的数据类型,例如,int8_t类型保证为 8 位长,您可以使用uint8_t读取/写入数据。
读取文件/从文件读取的示例
#include <cstdint>
#include <iostream>
#include <fstream>
int main() {
//writing
uint8_t value = '8';
std::ofstream myoutputfile;
myoutputfile.open("filename");
myoutputfile << value << std::endl;
myoutputfile.close();
//reading
std::ifstream myinputfile;
myinputfile.open("filename");
uint8_t c;
myinputfile >> c;
std::cout << c;
myinputfile.close();
return 0;
}
如果我想写入少量(<100KB)的数据,我会做这样的事情:
uint8_t data[5] = { '1', '2', '3', '4', '5' };
//writing
myoutputfile.open("filename");
for (int i = 0; i < 5; i++) {
myoutputfile << data[i];
}
myoutputfile.close();
//reading
myinputfile.open("filename");
for (int i = 0; i < 5; i++) {
myinputfile >> data[i];
std::cout << data[i];
}
myinputfile.close();
评论
0赞
samuraiJackDavidson
6/1/2021
你好。非常感谢您的输入和摘要。如果你不介意的话,我还有其他问题吗?读取它正在从文件中读取的代码。我必须在序列中的特定位置剪切或添加数据吗?我的意思是,如果我定义一个固定大小的整数并使用按位运算符写入它,可以吗?另外,如果我必须存储多达 250MB 的序列,这是否意味着应该声明具有多个固定大小整数的结构,或者我没有朝着正确的方向思考?再次感谢您抽出宝贵时间接受采访!
0赞
Gabbergabbo
6/1/2021
@samuraiJackDavidson,如果您只使用 8 位整数,那么在结构中存储这么多数据对我来说就像自杀:D考虑将该数据存储在堆中(类似于使用 malloc/free)。我已经更新了我的答案,向您展示如何写入/读取一些连续数据
0赞
samuraiJackDavidson
6/1/2021
好吧,我明白你说的自杀是什么意思了。非常感谢您编写的另一个示例。他们在任务的条件下提到 - 整数数组(您的示例似乎是它们的意思)和双链接指针列表。两者都使用可自选的整数类型作为参数。所以我可以像使用任何其他整数或值类型一样使用“cstdint”中的固定大小的整数吗?没有什么严格或有问题的地方,我应该像语法或其他东西那样担心它们?当我编写函数和声明时不太可能出现错误,仅仅因为它不是标准的 int?
0赞
Gabbergabbo
6/1/2021
@samuraiJackDavidson通常使用 cstdint 类型没有问题。只需定义您的函数并使用相同类型的数据调用它们以避免可能的副作用,您就可以开始了!玩得开心编程;)
0赞
samuraiJackDavidson
6/1/2021
谢谢!你帮了很多忙。我只是在网上找不到关于实际使用这个库的非常具体的信息,至少在这种情况下没有。我绝对需要知道并确定如何使用它才能使用它。祝你有一个好的!
上一个:我需要提取较低和较高的序列数
评论