如何将 64 位 void 指针转换为 32 位 void 指针?
Posted
技术标签:
【中文标题】如何将 64 位 void 指针转换为 32 位 void 指针?【英文标题】:How to convert 64bit void pointer into 32bit void pointer? 【发布时间】:2015-06-18 09:09:41 【问题描述】:我有一个缓冲区(包含音频数据),它是空指针。在 32 位系统中,它的大小是 4 字节,在 64 位系统中,它的大小是 8 字节。那么如何在不丢失任何数据的情况下将 64 位 void 指针转换为 32 位 void 指针?
【问题讨论】:
一个系统上的指针不太可能在另一个系统上有效,因此指针的转换对您没有帮助。如果要在系统之间传输数据,则传输数据,并在目标系统上为其分配一个新的内存块(具有自己的地址)。 为什么要这样做?以及你如何准确地使用这个“指针”。 @SanderDeDycker:为什么不将此评论作为答案? @alk :我不确定我是否理解 OP 的意图,正在等待进一步的澄清。那从未到来...... 【参考方案1】:只要 64 位指针 plus 中的值小于2^32
,您就可以使用指针的低 32 位。例如uint32_ptr ptr32 = static_cast<uint32_ptr>(ptr64)
。但是,像这样弄乱指针并不是最佳做法。
此外,我假设您将在同一台机器上的同一进程中使用这些指针。任何其他应用程序都会失败!
【讨论】:
好吧,你必须自己定义。您不能使用void*
,因为它显然是 64 位的。所以你必须定义一个 32 位无符号整数类型来保存它的值。例如using uint32_ptr = uint32_t
将完成这项工作。将整数标记为 32 位指针只是表面上的说明。
我认为这是一个偏移量,而不是一个指针。指针绝对寻址内存。这对于 64 位环境中的 32 位宽整数不可能。
确实如此。但据我所知,这是唯一的方法,如果我错了,请纠正我。以上是关于如何将 64 位 void 指针转换为 32 位 void 指针?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 32 位 *.lib 文件转换为 64 位 *.a 文件
VS 编译MFC 32位转 64 位报错 ON_WM_TIMER()在编译器从32位转换为64位的时候, 出现的问题;
VS 编译MFC 32位转 64 位报错 ON_WM_TIMER()在编译器从32位转换为64位的时候, 出现的问题;