我在结构中有一个void *值,我需要通过套接字将它发送到服务器。我知道我需要使用从void *转换为使用htonl
int value = htonl(kv->value);
但是编译器引发错误
passing argument 1 of ‘htonl’ makes integer from pointer without a cast [-Werror]
我也试过铸造无效*为int,没有工作,我用
htonl(*kv->value);
但是这也会造成错误。我如何将void *转换为正确的数据类型?
注意:结构不可编辑,因为我正在编写框架。
struct kvpair {
void *value;
};
'void *'在代码中实际表示什么?你指的是什么,需要通过网络发送? 'htonl()'和'ntohl()'只适用于整数,而不是指针。 * IF *'void *'本身包含实际的整数值,而不是指向内存其他地方的整数,那么你可以按原样键入'void *',例如:'uint32_t value = htonl((uint32_t )(kv-> value));'* IF * void *指向内存中其他位置的整数,您需要对指针进行类型转换,然后将其解引用以获取指向的值,例如:'uint32_t value = htonl(*(uint32_t *)(kv-> value));' –
一个进程中的指针值对另一个进程没有意义。你究竟想传达什么样的数据? – dbush