【发布时间】:2011-12-13 15:47:54
【问题描述】:
我正在处理一些遗留代码,并且遇到了一个函数,该函数显然用于在任意长的字段(比 ntohl 可以处理的更大)上执行网络字节顺序转换。
我不能很好地理解它是否除了在 msg 缓冲区范围内颠倒字节顺序之外做任何事情(或者即使它会可靠地做到这一点)。有人可以帮我分解并分析它,以便我可以用更容易理解的东西(或至少评论它)替换它!?
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
【问题讨论】:
-
请参阅stackoverflow.com/a/746203/367273,此功能与众多替代方案一起出现。在此基础上投票结束。
-
这取决于你。它显然值得评论(也许还有其他 SO 问题的链接?:-))
-
哦,我现在在里面找到了 :) 谢谢老兄。知道写这篇文章的人可能看过了,我感觉好多了,哈哈。
-
呵呵,请务必使用下一个维护者的链接评论它:)
-
请注意,反转 bit 顺序(这样做)与反转 byte 顺序不同。将数据从大端系统发送到小端系统不需要位反转。
标签: c++ networking