Я работаю с каким-то унаследованным кодом, и я наткнулся на функцию, которая, по-видимому, используется для преобразования сетевых байтовых порядков на произвольно длинном поле (больше, чем ntohl может обрабатывать).
Я не могу понять это достаточно хорошо, чтобы сказать, делает ли он что-то большее, чем отменяет порядок байтов по диапазону буфера msg (или даже если он сделает это надежно). Может кто-то помочь мне разобраться с этим и проанализировать его, чтобы я мог заменить его чем-то более понятным (или, по крайней мере, прокомментировать его)??
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}