从 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
值,则上述转换和取消引用将导致 未定义的行为。
我在结构中有一个 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
值,则上述转换和取消引用将导致 未定义的行为。