自己写的htonl函数

来源:百度知道 编辑:UC知道 时间:2024/06/03 22:44:50
int fun(unsigned long a)
{
int i;
printf("10a = %ld\n", a);
printf("16a = %x\n", a);
unsigned long b;
b = a >> 24;
b = (((a >> 16) & 0Xff) << 8) | b;
b = (((a >> 8) & 0Xff) << 16) | b;
b = ((a & 0Xff) << 24) | b;
for (i=0; i<4; i++)
{
if(!(b & 0Xff))
b = b >> 8;
}
printf("16b = %x\n", b);
return b;
}

int main(int argc, char* argv[])
{
unsigned long a = 11457;
unsigned long b ;
b = fun(a);
return 0;
}
请问我这个函数写的对不对啊。
通过他可不可以把一个主机字节序的变量变化成为使用网络字节序的变量。
我的意思就是说window下是12345678,通过函数进入网络后是不是还能表示成12345678。
如果不对有没有人自己写过这样的函数?
一楼问题没看明白。我当然知道有现成的。我是问我这个函数表达的意思对是不对?我运行了,如果给函数一个123456,那么返回的是563412。这样的返回结果是不是真确的?
对上面忘说了,应该是十六进制,我们就是在做练习。

代码没看,不是有现成的函数么?
另外好象WINDOWS是一样的,UNIX不一样,你的代码也没有#ifdef WIN之类的予编译,所以跨平台就有问题.
东西对不对,你自己调试下看嘛.

看代码和实际运行你的结果是正确的。
但是你输入123456结果出来不应该是563412,因为是输入的是10进制的HOHO,16进制的就是了。
另外忘记了WINDOWS是不是应该是这个结果......

应该是正确的,其实你可以实验几个数看看啊。我实验了几个都对啊.