c++ - 是否可以在 cpp 中转换为固定大小的数组?
问题描述
我不知道这是可能的,可能不是 - 但也许
我想要实现的是如下所示,仅针对n
大小字符数组:
*(__int64*)(address) = 0x1337;
这适用于 type __int64
or __int32
orfloat
等等,我想要做的是
*(char[8]*)(address) = [0x37, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
解决方案
是否可以在 cpp 中转换为固定大小的数组?
不,不可能在 C++ 中强制转换为数组类型。但是例如,您可以转换为指向数组的指针,我猜这可能是您想要做的。
*(char[8]*)(address)
我想你正试图转换address
成一个指向数组的指针。这不是指向数组的指针的正确语法。这是对的:*(char(*)[8])(address)
另一个问题是数组不可分配。您可以做的是分配数组的每个元素。有标准算法可以做这样的循环。在这种情况下,一个简单的解决方案是声明一个包含这些元素的数组,然后从该数组复制到address
. 例子:
char* ptr = *static_cast<char(*)[8]>(address);
constexpr std::array data{0x37, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
std::copy(std::begin(data), std::end(data), ptr);
分配数组的一种方法是将它们包装在一个类中,并使用该类的赋值运算符。事实上,std::array
上面例子中使用的模板正是这样的包装器。如果您将该类型用于原始数组,那么您可以简单地执行以下操作:
std::array<char, 8> array;
void* address = &array; // imagine that for some reason you are forced to use void*
*static_cast<std::array<char, 8>*>(address)
= {0x37, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
PS 避免 C 风格的演员表。
推荐阅读
- javascript - 如何使用 array.find 将其与另一个对象进行比较
- aurelia - Aurelia 服务器端渲染 - 避免不必要的客户端 api 调用
- python-3.x - 使用 Selenium 收集的 cookie 的到期日期格式
- wordpress - 如何在循环帖子到引导网格时获取 WordPress?
- azure - Azure DevOps (VSTS / TFS) - 通过 OData/API 添加讨论
- r - 如何使用 R 中的绘图功能绘制具有不同颜色的不同组
- c# - Identity Server 4 - API 在部署到服务器时返回 401 Unauthorized
- python - 在python中使用变量的Mysql Update语句
- c# - 具有多个部分的 C# xml 到字典转换
- r - 如何从 zip 读取多个 csv 文件并导入 R 中的不同数据帧?