Jon*_*nas 1 c sockets void-pointers memory-address
我想通过C中的套接字发送/接收内存地址.我有以下内容:
void *ptr = malloc(122); /* So the pointer points to some valid address */
unsigned char *socketData = NULL;
socketData = (unsigned char*)malloc(sizeof(void*));
memset(socketData, 0, sizeof(void*));
/* ??? How to get the memory address - where ptr points to - to socketData ??? */
Run Code Online (Sandbox Code Playgroud)
我知道使用打印指针地址的方法printf是使用%p,即
printf("%p", ptr);
Run Code Online (Sandbox Code Playgroud)
但这打印例如0x0021ef1a.我想要的只是以下内容:0021ef1a
在接收方:如何将接收到的字节转换回void*?
啊:代码应该适用于32位以及64位系统;)此外代码应该使用-Wall -Werror编译....呵呵
谢谢你的帮助!周末愉快,乔纳斯
要回答您的问题,您只需再次复制即可将原始数据转换回指针:
void *ptr = malloc(42);
void *ptr2 = NULL;
unsigned char *data = malloc(sizeof(void *));
memcpy(data, &ptr, sizeof(void *));
...
memcpy(&ptr2, data, sizeof(void *));
printf("ptr = %p\n", ptr);
printf("ptr2 = %p\n", ptr2);
Run Code Online (Sandbox Code Playgroud)
请注意,在大多数情况下,通过套接字发送指针毫无意义.指针值对接收者没用,除非它恰好与发送者完全相同.每个进程都有一个单独的虚拟地址空间.
鉴于你提出的申请,我建议在接收方,你应该考虑用一个指针代表这个,因为它在那种形式下是没用的.相反,为什么不将它存储在一个适当大的整数类型?
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |