我正在使用一些遺留代碼,並且我遇到了一個顯然用於在任意長字段(大於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