C++ 如何将64位空指针转换为32位空指针?

C++ 如何将64位空指针转换为32位空指针?,c++,ios,c,audio,C++,Ios,C,Audio,我有一个缓冲区(包含音频数据),它是空指针。在32位系统中,它的大小是4字节,在64位系统中,它的大小是8字节。那么,如何将64位void指针转换为32位void指针而不丢失任何数据呢 只要64位指针中的值加上缓冲区的大小小于2^32,就可以使用指针较低的32位。例如uint32\u ptr ptr32=static\u cast(ptr64)。然而,这并不是一个最好的实践来处理这样的指针 此外,我假设您将在同一台机器上的同一进程中使用这些指针。任何其他应用程序都将失败 一个系统上的指针不太可能

我有一个缓冲区(包含音频数据),它是空指针。在32位系统中,它的大小是4字节,在64位系统中,它的大小是8字节。那么,如何将64位void指针转换为32位void指针而不丢失任何数据呢

只要64位指针中的值加上缓冲区的大小小于
2^32
,就可以使用指针较低的32位。例如
uint32\u ptr ptr32=static\u cast(ptr64)
。然而,这并不是一个最好的实践来处理这样的指针


此外,我假设您将在同一台机器上的同一进程中使用这些指针。任何其他应用程序都将失败

一个系统上的指针不太可能在另一个系统上有效,所以指针的转换对您没有帮助。如果要在系统之间传输数据,请传输数据,并在目标系统上为其分配新的内存块(具有自己的地址)。为什么要这样做?你到底是如何使用这个“指针的”。@Sanderedycker:为什么不把这个评论作为一个答案呢?@alk:我不确定我是否理解了OP的意图,正在等待进一步的澄清。那永远不会到来…好吧,你必须自己定义它。您不能使用
void*
,因为它显然是64位的。因此,您必须定义一个32位无符号整数类型来保存其值。例如,
使用uint32\u ptr=uint32\u t
将完成此工作。将整型标记为32位指针只是一种化妆品的澄清。我认为这是一个偏移量,而不是指针。指针绝对指向内存。在64位环境中,对于32位宽的整数,这是不可能的。但据我所知,这是唯一的办法,如果我错了,请纠正我。