我正在使用一些遗留代码,并且我遇到了一个显然用于在任意长字段(大于ntohl可以处理的字段)上执行网络字节顺序转换的函数。这实际上是做什么的? - 疯狂的C++函数
虽然(或者即使它可以可靠地做到这一点),但我不能很好地理解它是否做了比在msg缓冲区范围内颠倒字节顺序更多的事情。有人可以帮我解决这个问题,并分析它,所以我可以用更容易理解的东西来取代它(或者至少评论它)!
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
请参阅http://stackoverflow.com/a/746203/367273其中此功能与许多选择一起出现。投票在此基础上结束。 – NPE
呃......我应该把它当作“它是完全安全的,不用担心吗?” –
这取决于你。它显然值得一个评论(也许是另一个SO问题的链接:-)) – NPE