首页 > 解决方案 > 一次读取 ULONG 的文件

问题描述

我正在尝试适应一些代码,这些代码会在某些数据的头部创建一个 char *。然后能够一次递增该指针 unsigned long 以读取数据。

有人告诉我这样做的一个好方法是使用 ifstream 将文件(位于 C:/ 上的某处)读入向量:

std::vector<int8_t>

但是我的困惑是如何将文件的每一部分拉出 ULONG 大小。我在下面发布了逻辑,这是与需要数据处于该大小的硬件进行通信,因此它们一次遍历 sizeOf(ULONG) 处的指针,直到它们读取文件的末尾(他们通过检查文件知道尺寸)。我知道我需要以某种方式将其加载到内存中..但是我如何以相同的方式遍历

他们的一小段代码如下所示:

char* resData;
res = FindResource(NULL, MAKEINTRESOURCE(fpgaDevice), L"FPGADATA");
  resHandle = LoadResource(NULL, res);
  resData = (char*)LockResource(resHandle);

然后推进文件,他们将指针推进 ULONG 的大小:

resData += sizeof(ULONG);

要读取指针,只需使用:

(ULONG*)resData

标签: c++cfilewinapi

解决方案


我假设您的数据是正确本机格式的二进制数据(我认为您的问题暗示了这一点)。

因此,如果您的数据是 ULONG,请不要使用 char 指针,请使用 ULONG 指针,如下所示

vector<int8_t> res;
// some code to read into res

// get the underlying data
ULONG* resData = (ULONG*)res.data();

// read a ULONG
ULONG someData = *resData;

// advance to the next ULONG
++resData;

重要的部分是使用该data()方法访问向量数据。


推荐阅读