0

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

1 回答 1

2

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

例如

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

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

于 2016-04-27T17:13:25.037 回答