gpt4 book ai didi

c - 如何通过 C 中的套接字发送和接收内存地址?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:17 24 4
gpt4 key购买 nike

我想通过 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 ??? */

我知道使用printf打印指针地址的方法是使用%p,即

printf("%p", ptr);

但这会打印例如 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);

请注意,在大多数情况下,通过套接字发送指针毫无意义。指针值对接收方来说是无用的,除非它恰好与发送方是同一个进程。每个进程都会有一个单独的虚拟地址空间。

鉴于您提出的应用程序,我建议在接收方,您应该考虑用指针来表示它,因为它在那种形式下没有用。相反,为什么不将其存储为适当大的整数类型?

关于c - 如何通过 C 中的套接字发送和接收内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5058598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com