我在结构中有一个void *值,我需要通过套接字将它发送到服务器。我知道我需要使用
int value = htonl(kv->value);
但编译器抛出错误
passing argument 1 of ‘htonl’ makes integer from pointer without a cast [-Werror]
我也尝试将void *转换为int,不起作用,我使用了
htonl(*kv->value);
但这也引发了错误。如何将void *转换为正确的数据类型?
旁注:在编写框架时,结构不可编辑。
struct kvpair {
void *value;
};
答案 0 :(得分:2)
您不能直接取消引用void *
类型,您必须首先将其转换为可以取消引用并取消引用的内容。
例如
uint32_t value = htonl(*(uint32_t *) kv->value);
此强制转换和解除引用要求kv->value
实际指向您尝试将其强制转换为的类型。如果在您的代码中,kv->value
指向单个short
值,则上述强制转换和解除引用将导致未定义的行为。