微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在cpp中强制转换为固定大小的数组?

如何解决是否可以在cpp中强制转换为固定大小的数组?

我不知道那是可能的,也许不是-但也许

仅针对n大小的chars数组,我要实现的目标如下:

*(__int64*)(address) = 0x1337;

这对于__int64__int32float以及其他类型来说都很好,我想做的是

*(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 举报,一经查实,本站将立刻删除。