関数
関数 uint32_t htonl(uint32_t hostlong) を使用して、uint32_t をネットワーク バイト オーダーに変換しています。
私がしたいこと
変数をネットワーク バイト オーダーに変換した後、変数を使用して計算を行う必要があります。
//Usually I do calculate with much more variables and copy them into a much
// larger buff - to keep it understandable and simple I broke it down
// to one calculation
uint32_t var = 1;
void* buff;
buff = malloc(sizeof(uint32_t));
while(var < 5) {
var = htonl(var);
memcpy(buff, &var, sizeof(uint32_t));
doSomethingWithBuff(buff);
var++; // FAIL
}
私にできることは、しかし...
実際、私はすでにこの問題の解決策を見つけました:
uint32_t var = 1, nbo;
void* buff;
buff = malloc(sizeof(uint32_t));
while(var < 5) {
nbo = htonl(var);
memcpy(buff, &nbo, sizeof(uint32_t));
doSomethingWithBuff(buff);
var++;
}
問題は、nbo が単にバッファーとして使用されるため、このソリューションでメモリを浪費することです。
私がやりたいこと
memcpy() 関数内で htonl() 関数を使用できれば完璧です。memcpy() は、2 番目の値を void* にする必要があります。私の質問は: htonl() の戻り値のアドレスを取得するにはどうすればよいですか?
uint32_t var = 1;
void* buff;
buff = malloc(sizeof(uint32_t));
while(var < 5) {
memcpy(buff, (GET ADDRESS)htonl(var), sizeof(uint32_t));
doSomethingWithBuff(buff);
var++;
}
そして、「この変数のアドレスがない」ためにそれが不可能な場合: 変数へのポインターではなく変数を返す関数はどのように機能しますか?