分类:
2006-12-14 13:46:15
1)(unsigned long *)p:把char指针p强制转换为unsigned long型指针,由于sizeof(unsigned long) = sizeof(char) * 4,因此这个时候这个强制转换后的指针可以指向包括原来p指针在内的四个字节的数据。
2)*(unsigned long *)p :对这个指针求值,也就是把p开始的四个字节的数据解释为unsigned long型的数据。
3)最后比较两个已经转换好的unsigned long数据。
这里的关键在于sizeof(unsigned long) = sizeof(char) * 4,而且需要比较的字符串“HTTP”正好是四个。
>这不是一个严格合格的程序(strictly conforming program),因为它的结果依赖于平台:在一个 sizeof(long) != 4 的系统上会得出错误的结论。作为一个技巧可以学习,但是程序不能这么写。字符串的比较还是要使用字符串比较函数(如 strcmp())
另外这也不是一个严格的程序,因为它的结果依赖与平台的能力,需要能把任意的 char *转成long *, 然后取值,俺手头的arm7和arm9就不具备这个能力,这种代码很容易导致一个alignment异常。