c++ - 将文件读入 C++ 一个“数组”对象(不是数组)
问题描述
有一个 C++ 库,其中一个函数需要一个array
对象。
void update(const std::array<T, AN>& input)
它的使用示例只是显示了一个假设的fill_buffer()
,而不是读取文件的实际代码。
std::array<unsigned char, 512> buffer;
while (fill_buffer(buffer))
{
hash_stream.update(buffer);
}
我认为这ifstream
是读取文件的标准 C++ 方式,但ifstream::read()
需要一个实际的数组,而不是一个array
对象。那么,如何解决这个问题呢?我想到的方法是:
- 将文件数据读入一个实际的数组,然后将该数组复制到
array
对象中? - 使用其他类而不是
ifstream
读取文件?
推荐的方法是什么?
解决方案
好吧,我已经像这样检查过。
生成带有随机整数的 512b 文件
dd if=/dev/random of=512.bin bs=4 count=128 iflag=fullblock
写了这个程序
#include <iostream>
#include <fstream>
#include <array>
#include <cstring>
int main()
{
constexpr size_t int_size = sizeof(int32_t);
std::array< char, 512 > buffer;
std::ifstream f("512.bin");
f.read(buffer.data(), 512);
f.close();
union{
int32_t ret;
char conv[int_size];
} conv;
for(int i =0; i <512; i+=int_size)
{
std::memcpy( conv.conv, &(buffer[i]), int_size);
std::cout << i << " - " << i+int_size << " = " << conv.ret << std::endl;
}
}
- 运行后我得到这样的结果:
0 - 4 = 544950647
4 - 8 = -2064427695
8 - 12 = 1451754975
12 - 16 = 1292626444
16 - 20 = -1100810537
20 - 24 = -1835802020
24 - 28 = -5945583
所以在我看来,只需使用std::array::data()
方法来获取封装数据的原始指针
推荐阅读
- html - Bootstrap col中的垂直对齐元素
- angular - 如何根据条件禁用日期选择器
- angular - 调用 backendserver-angular 的服务类的单元测试
- django - net::err_content_length_mismatch 200 (ok) django, apache
- java - 如何使用 netflix hystrix 获取断路器状态的状态?
- go - 在运行时向电报机器人添加新的处理程序
- react-router - 道具对象为空,history.push
- time - 假设我们有 n 个整数,其值范围从 0 到 n^5 -1。使用基数排序对这些数字进行排序的算法复杂度是多少?
- c# - 模拟函数在 C# 单元测试中不抛出异常
- sabre - 如何使用sabre应用的促销代码搜索和预订票价?