Estoy trabajando con algún código heredado y me encontré con una función que aparentemente se utiliza para realizar conversiones de orden de bytes de red en un campo arbitrariamente largo (más grande que ntohl puede manejar).¿Qué hace esto realmente? - Crazy C++ función
No puedo entenderlo lo suficiente como para saber si está haciendo algo más que invertir el orden de bytes en el rango del búfer de mensajes (o incluso si lo hace de manera confiable). ¿Alguien me puede ayudar a descomponerlo y analizarlo para poder reemplazarlo con algo que sea más inteligible (o al menos comentarlo bien)?
void swapit(unsigned char *msg, int length) {
for(;length>0;length--, msg++) {
*msg = ((*msg * 0x0802LU & 0x22110LU) |
(*msg * 0x8020LU & 0x88440LU)) *
0x10101LU >> 16;
}
}
Consulte http://stackoverflow.com/a/746203/367273 donde aparece esta función junto con numerosas alternativas. Votación para cerrar sobre esa base. – NPE
Erm ... ¿debería tomar eso como un "es perfectamente seguro y no te preocupes por eso?" –
Eso depende de usted. Claramente merece un comentario (y tal vez un enlace a esa otra pregunta ASÍ :-)) – NPE