Sto lavorando con qualche codice legacy e mi sono imbattuto in una funzione che è apparentemente usata per eseguire conversioni di ordine di byte di rete su un campo arbitrariamente lungo (più grande di ntohl in grado di gestire).Cosa fa in realtà questo? - Funzione Crazy C++
Non riesco a capirlo abbastanza bene da dire se sta facendo qualcosa di più che invertire l'ordine dei byte sul range del buffer msg (o anche se lo farà in modo affidabile). Qualcuno può aiutarmi a scomporlo e analizzarlo così posso sostituirlo con qualcosa che è più comprensibile (o almeno commentarlo bene!)?
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
Vedere http://stackoverflow.com/a/746203/367273 dove questa funzione viene visualizzata insieme a numerose alternative. Votare per chiudere su questa base. – NPE
Erm ... dovrei prenderlo come "è perfettamente sicuro e non ti preoccupare?" –
Dipende da te. Merita chiaramente un commento (e forse un link a quell'altra domanda SO? :-)) – NPE