2004年11月17日 by Quickmouse(quickmouse@263.net)
今天被这两个函数涮了一把,其实是自己太笨了。先是看自己写的两个socket BPF函数对于数据的处理用了不同的转换,其中一个用htonl,另外一个用了ntohl,于是写了一个这样的测试程序,呵呵:
#include <stdio.h>
#include <netinet/in.h>
int main(void)
{
char mac[]="\x01\x02\x03\x04\x05\x06";
unsigned int k1,k2, k3;
printf("length:%d\n", sizeof(mac));
k1 = htonl(*(unsigned int *)(mac+2));
k2 = ntohl(*(unsigned int *)(mac+2));
k3 = (*(unsigned int *)(mac+2));
printf("k1:%x\n", k1);
printf("k2:%x\n", k2);
printf("k3:%x\n", k3);
return 1;
}
猜结果怎么着:
[zgh@Kernel26 test]$ ./a.out
length:7
k1:3040506
k2:3040506
k3:6050403
发现htonl和ntohl结果是一样的,郁闷了好久,终于发现这两个函数其实都是把数据顺序交换一下位置而已,从结果上来说,它们是一样的。用不同的函数名只是为了好记罢了,唉。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=175931