我试图用这两个原型编写C函数:
int extract_little (char* str, int ofset, int n);
int extract_big(char* str, int ofset, int n);
现在一般的想法是我需要从地址str + ofset开始以两种格式返回n字节整数。附: Ofset还没有做任何事情,我计划(试图)通过一个偏移来重新调整内存,一旦我弄清楚小端,为了大。
我试图让它像这样输出;对于小端,基于i=0xf261a3bf;
,
0xbf 0xa3 0x61 0xf2
int main()
{
int i = 0xf261a3bf;
int ofset = 1; // This isn't actually doing anything yet
int z;
for (z = 0; z < sizeof(i); z++){
printf("%x\n",extract_little((char *)&i,ofset, sizeof(i)));
}
return 0;
}
int extract_little(char *str,int offs, int n) {
int x;
for (x = 0; x < n; x++){
return str[x];
}
}
我不确定还有什么可以尝试的。我想出了一种困难的方式,即使我认为我把它放在for循环中,我仍然无法从返回中返回超过1的值。
谢谢!
答案 0 :(得分:1)
unsigned long extract_little(const void *p, size_t offset, unsigned char n) {
unsigned long ret = 0;
for(size_t i = offset + n - 1; i >= offset; i--)
ret = (ret<<8) + ((char *)p)[i];
return ret;
}
unsigned long extract_big(const void *p, size_t offset, unsigned char n) {
unsigned long ret = 0;
for(size_t i = offset; i < (offset + n); i++)
ret = (ret<<8) + ((char *)p)[i];
return ret;
}
int main()
{
int i = 0xf261a3bf;
printf("%x\n", extract_little(&i, 0, sizeof(i)));
return 0;
}
当然只能使用sizeof(无符号长)最大值的n。
答案 1 :(得分:1)
关于你的代码:return执行它所说的,它从函数返回。循环永远不会超过第一个元素。
关于问题:检查htonl和ntolh,除了锻炼。