Hello, Mc_Leod!
You wrote on Mon, 24 May 2004 15:26:14 GMT:
ML> Господа, подскажите как руками правильно преобразовать из одного в другое. ML> Что-то ищу алгоритм и найти не могу.
Если мне не изменяет память, то там обычный сдвиг. Посмотри в MSDN
функции htonl, ntohl
Здравствуйте, Mc_Leod, Вы писали:
M_L>Господа, подскажите как руками правильно преобразовать из одного в другое. M_L>Что-то ищу алгоритм и найти не могу.
Если ты пишешь для интела — то смотри htons/ntohs, htonl/ntohl.
А вообще, чего сложного:
inline unsigned short swapbytesw(unsigned short w) { return (w<< 8)|(w>> 8); }
inline unsigned long swapwordsd(unsigned long d) { return (d<<16)|(d>>16); }
inline unsigned long swapbytesd(unsigned long d)
{ return (d<<24)|((d & 0xFF00)<<8)|((d & 0xFF0000)>>8)|(d>>24); }
Здравствуйте, Сергей Зизев, Вы писали:
СЗ>функции htonl, ntohl
Эти функции кроссплатформенные, означают "host-to-network long", "network-to-host long" (а ещё есть htons/ntohs — "short"). Считается, что "network" — это big-endian. А "host" может быть как little-endian (платформы intel), так и big-endian (motorola и др...).
Поэтому, если тебе нужно перевести из "родного" в "сетевой" и обратно — то используй их. А если заведомо конвертировать big/little — то, соответственно...
Здравствуйте, Сергей Зизев, Вы писали:
СЗ>Hello, Mc_Leod! СЗ>You wrote on Mon, 24 May 2004 15:26:14 GMT:
ML>> Господа, подскажите как руками правильно преобразовать из одного в другое. ML>> Что-то ищу алгоритм и найти не могу.
СЗ>Если мне не изменяет память, то там обычный сдвиг. Посмотри в MSDN СЗ>функции htonl, ntohl
СЗ>WBR
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Mc_Leod, Вы писали:
M_L>>Господа, подскажите как руками правильно преобразовать из одного в другое. M_L>>Что-то ищу алгоритм и найти не могу.
К>Если ты пишешь для интела — то смотри htons/ntohs, htonl/ntohl. К>А вообще, чего сложного: К>
К>inline unsigned short swapbytesw(unsigned short w) { return (w<< 8)|(w>> 8); }
К>inline unsigned long swapwordsd(unsigned long d) { return (d<<16)|(d>>16); }
К>inline unsigned long swapbytesd(unsigned long d)
К> { return (d<<24)|((d & 0xFF00)<<8)|((d & 0xFF0000)>>8)|(d>>24); }
К>
Здравствуйте, Mc_Leod, Вы писали:
M_L>Господа, подскажите как руками правильно преобразовать из одного в другое. M_L>Что-то ищу алгоритм и найти не могу.
В асме есть такая команда bswap.
Она делает всю грязную работу за вас
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Mc_Leod, Вы писали:
M_L>>Господа, подскажите как руками правильно преобразовать из одного в другое. M_L>>Что-то ищу алгоритм и найти не могу.
К>Если ты пишешь для интела — то смотри htons/ntohs, htonl/ntohl. К>А вообще, чего сложного: К>
К>inline unsigned short swapbytesw(unsigned short w) { return (w<< 8)|(w>> 8); }
К>inline unsigned long swapwordsd(unsigned long d) { return (d<<16)|(d>>16); }
К>inline unsigned long swapbytesd(unsigned long d)
К> { return (d<<24)|((d & 0xFF00)<<8)|((d & 0xFF0000)>>8)|(d>>24); }
К>