从void *转换为使用htonl

时间:2016-04-27 17:08:42

标签: c void-pointers htonl

我在结构中有一个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;
};

1 个答案:

答案 0 :(得分:2)

您不能直接取消引用void *类型,您必须首先将其转换为可以取消引用并取消引用的内容。

例如

uint32_t value = htonl(*(uint32_t *) kv->value);

此强制转换和解除引用要求kv->value实际指向您尝试将其强制转换为的类型。如果在您的代码中,kv->value指向单个short值,则上述强制转换和解除引用将导致未定义的行为