Регистрация
15 Июн 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
В VC++ имеется функция SWAPLONG, мне дозарезу необходим ее аналог на с++. Аналог функции SWAPSHORT нашла, а с лонг проблема. Просьба помочь...
 
собственно: void *p = 0; // p указатель на неизвестный тип данных // p нулевой указатель - не разыменовывать char *c; // c указатель на один байт c = (char *)p;
 
#define SWAPWORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x)) #define SWAPLONG(x) MAKELONG(SWAPWORD(HIWORD(x)), SWAPWORD(LOWORD(x))) (MAKEWORD, MAKELONG, HIWORD, LOWORD, HIBYTE и LOBYTE объявлены в minwindef.h). Или можно просто взять указатель на твой LONG, привести к char* и отправить в std::reverse (algorithm.h): std::reverse((char*)&myLong, (char*)&myLong + 4);
 
Если используете gcc, то можно вызвать функцию __builtin_bswap32 без включения каких-либо заголовков uint32_t __builtin_bswap32 (uint32_t x)
 
Учись. (если я правильно понял что нужно, ибо у меня не гуглятся эти макросы) union MYLONG{ MYLONG( long L ):l(L){} long l; unsigned char ch[ 4 ]; void swap(){ unsigned char tmp1 = ch[3]; unsigned char tmp2 = ch[2]; ch[3] = ch[0]; ch[2] = ch[1]; ch[1] = tmp2; ch[0] = tmp1; } }; MYLONG l = 0x99DEAD11; l.swap();
 
Назад
Сверху