構造体にvoid *値があり、ソケット経由でサーバーに送信する必要があります。私はvoid *からhtonlを使用するように変換
int value = htonl(kv->value);
を使用する必要があります知っているが、コンパイラは、私も動作しませんでした、intにボイド*をキャストしようとしたエラー
passing argument 1 of ‘htonl’ makes integer from pointer without a cast [-Werror]
を投げていると私は
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