我在結構中有一個void *值,我需要通過套接字將它發送到服務器。我知道我需要使用從void *轉換爲使用htonl
int value = htonl(kv->value);
但是編譯器引發錯誤
passing argument 1 of ‘htonl’ makes integer from pointer without a cast [-Werror]
我也試過鑄造無效*爲int,沒有工作,我用
htonl(*kv->value);
但是這也會造成錯誤。我如何將void *轉換爲正確的數據類型?
注意:結構不可編輯,因爲我正在編寫框架。
struct kvpair {
void *value;
};
'void *'在代碼中實際表示什麼?你指的是什麼,需要通過網絡發送? 'htonl()'和'ntohl()'只適用於整數,而不是指針。 * IF *'void *'本身包含實際的整數值,而不是指向內存其他地方的整數,那麼你可以按原樣鍵入'void *',例如:'uint32_t value = htonl((uint32_t )(kv-> value));'* IF * void *指向內存中其他位置的整數,您需要對指針進行類型轉換,然後將其解引用以獲取指向的值,例如:'uint32_t value = htonl(*(uint32_t *)(kv-> value));' –
一個進程中的指針值對另一個進程沒有意義。你究竟想傳達什麼樣的數據? – dbush