功能
我正在使用函数 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() 需要第二个值是 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++;
}
如果因为“没有此变量的地址”而无法实现:返回变量而不是指向变量的指针的函数如何工作?