在Windows上在SIZE_T和void*之间进行强制转换
Casting between SIZE_T and void* on Windows
我读过几篇关于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);
相关文章:
- 在 Rcpp 中的字符串类型之间转换时出错
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 在不同类型之间转换常量指针
- 在 3D 骨架系统 DirectX 之间转换
- C++ 如何将用户控件添加到窗体,以便我可以在面板之间转换
- 在 std::u8string 和 std::string 之间转换
- 如何在Unicode/UCS CodePoint和UTF16替代对之间转换
- 在DXGI格式之间转换RGBA数据
- 在两个不动点表达之间转换
- 在函数指针类型之间转换
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 如何在C 中的不同类之间转换
- 一个关于C++中double和int之间转换的奇怪结果
- 模板类在模板类型之间转换,但也专门化
- 是否有Visual c++编译器在线,以及如何在c++和vs简单代码之间转换
- c/在Unix时间和"Gregorian time"之间转换
- 无法使用iconv在编码之间转换
- 在std::string和std::wstring之间转换的多平台方式
- 我真的应该每次在基元类型之间转换时都使用static_cast吗
- 使用Boost::units在两个量之间转换的最简单方法