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

时间:2014-05-18 07:42:01

标签: c++ windows size-t

我已经阅读了关于stackoverflow的几篇帖子,例如size_t vs. uintptr_tIs sizeof(size_t) == sizeof(void*) always true?,并且理解根据C ++标准,SIZE_T和void *的大小可以不同,以考虑16位等体系结构分段架构。

所以我想将我的场景平台限制为Windows,无论是x86,x64,WoA(Windows on Arm):在Windows上,如果我在malloc中创建一个void *类型的指针,我想要在将指针算术传递给memcpy之前做指针运算,我必须做类似的事情:

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

这似乎非常繁琐,特别是如果你不得不在各地乱扔这种类型的铸件(我正在处理各种偏移)。鉴于这是在Windows平台上,我想知道是否有一些简化可以减少这种类型的样板代码?

感谢。

2 个答案:

答案 0 :(得分:6)

将其强制转换为unsigned char *并使用该算法进行指针运算。

答案 1 :(得分:0)

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

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