从 void * 转换为使用 htonl

Converting from void * to use 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;
};

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

例如

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

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