Tôi đang làm việc với một số mã cũ và tôi bắt gặp một hàm được sử dụng để thực hiện chuyển đổi thứ tự byte mạng trên trường dài tùy ý (lớn hơn ntohl có thể xử lý).Điều này thực sự làm gì? - Chức năng Crazy C++
Tôi không thể hiểu nó đủ tốt để biết nếu nó làm bất cứ điều gì nhiều hơn đảo ngược thứ tự byte trên phạm vi bộ đệm msg mặc dù (hoặc thậm chí nếu nó sẽ làm điều đó đáng tin cậy). Ai đó có thể giúp tôi phá vỡ điều này và phân tích nó để tôi có thể thay thế nó bằng cái gì đó dễ hiểu hơn (hoặc ít nhất là bình luận tốt) !?
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
Xem http://stackoverflow.com/a/746203/367273 nơi chức năng này xuất hiện cùng với nhiều lựa chọn thay thế. Bỏ phiếu để đóng trên cơ sở đó. – NPE
Erm ... tôi có nên coi đó là "nó hoàn toàn an toàn và không lo lắng về nó?" –
Điều đó tùy thuộc vào bạn. Nó rõ ràng xứng đáng một bình luận (và có lẽ một liên kết đến câu hỏi SO khác? :-)) – NPE