如何解决是否可以在cpp中强制转换为固定大小的数组?
我不知道那是可能的,也许不是-但也许
仅针对n
大小的chars数组,我要实现的目标如下:
*(__int64*)(address) = 0x1337;
这对于__int64
或__int32
或float
以及其他类型来说都很好,我想做的是
*(char[8]*)(address) = [0x37,0x13,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};
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,0x00};
P.S。避免使用C样式强制转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。