在Windows上在SIZE_T和void*之间进行强制转换

Casting between SIZE_T and void* on Windows

本文关键字:之间 转换 void 上在 Windows SIZE      更新时间:2023-10-16

我读过几篇关于stackoverflow的文章,如size_t vs. uintptr_t和sizeof(size_t) == sizeof(void*)总是真的吗?并了解到,根据c++标准,SIZE_T和void*的大小可以不同,以考虑到16位分段体系结构等体系结构。

所以我想限制我的场景的平台是Windows,无论是x86, x64, WoA (Windows on Arm):在Windows上,如果我malloc创建一个类型为void*的指针,我想做指针算术之前传递给内存或其他东西,我必须这样做:

void* p = malloc(100);
memcpy(reinterpret_cast<void*>((reinterpret_cast<SIZE_T>(p) + offset), p2, 100);

这看起来非常乏味,特别是如果你必须在任何地方来回丢弃这种类型的转换(我正在使用各种偏移量)。考虑到这是在Windows平台上,我想知道是否可以进行一些简化以减少这种类型的样板代码?

谢谢。

将其强制转换为unsigned char *,并使用它进行指针算术。

根据你的描述,我认为你只是想:

memcpy( (char *)p + offset, p2, 100);