c++ - 一次读取 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
解决方案
我假设您的数据是正确本机格式的二进制数据(我认为您的问题暗示了这一点)。
因此,如果您的数据是 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()
方法访问向量数据。
推荐阅读
- powershell - 计算机名称和主要用户配置文件的 PowerShell 列表
- mysql - MYSQL 唯一列
- r - R - 在我的数据框上使用 ungroup() 会破坏我的功能吗?
- javascript - 二叉搜索树中的删除如何在这里工作?
- python - 退出循环时字典中的列表为空
- powershell - Powershell 和 yaml 文件
- linux - 当我尝试使用 Cygwin 在 Windows 上交叉编译 Libcork 时出现错误(Windows 中存在类似版本的 ipset)
- java - Path.equals 在 Windows 和 Linux 上的行为不同
- arrays - Julia 中大量数组的高效连接
- reactjs - 如何在 mapbox 场景中使用“WASD”键移动 3D 对象