Здравствуйте, alexora, Вы писали:
A>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>киньте код плиз, что бы он работал в gcc
Есть POSIX'ные функции (хотя я видел реализации и в виде макросов)
htonl()
ntohl()
для конвертации из host порядка байт в сетевой и наоборот
Re[2]: как моменять местами слова в unsigned long не использ
Здравствуйте, GarikTot, Вы писали:
A>>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>>киньте код плиз, что бы он работал в gcc
GT>Есть POSIX'ные функции (хотя я видел реализации и в виде макросов) GT>
GT>htonl()
GT>ntohl()
GT>
GT>для конвертации из host порядка байт в сетевой и наоборот
ответ неверный. ему надо чтобы 0x12345678 стало 0x56781234, а не 0x78563412.
Re[2]: как моменять местами слова в unsigned long не использ
Здравствуйте, aik, Вы писали:
A>>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>>киньте код плиз, что бы он работал в gcc
aik>мда. а в студии подсмотреть, раз уж ты про них знаешь?
aik>#define LOWORD(l) ((WORD)(l)) aik>#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) aik>#define LOBYTE(w) ((BYTE)(w)) aik>#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
а, ну собсно и это надо
#define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
а дальше как в студии.
как моменять местами слова в unsigned long не используя мак
Здравствуйте, alexora, Вы писали:
A>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>киньте код плиз, что бы он работал в gcc
мда. а в студии подсмотреть, раз уж ты про них знаешь?
Здравствуйте, alexora, Вы писали:
A>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>киньте код плиз, что бы он работал в gcc
typedef struct tagLONG_WORDS{
unsigned short usLOW_WORD;
unsigned short usHIGH_WORD;
} LONG_WORDS;
typedef union _SWAP_WORDS{
unsigned long ulLONG;
LONG_WORDS lwLONG_WORDS;
} SWAP_WORDS;
Re: как моменять местами слова в unsigned long не используя
От:
Аноним
Дата:
12.11.03 08:31
Оценка:
Здравствуйте, alexora, Вы писали:
A>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>киньте код плиз, что бы он работал в gcc
unsigned long x = ...
x = ((x << 16) | (x >> 16)) & 0xffffffffUL;
Re: как моменять местами слова в unsigned long не используя
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, alexora, Вы писали:
A>>как моменять местами слова в unsigned long не используя макросы vc++6.0. (HWORD, LWORD) A>>киньте код плиз, что бы он работал в gcc
А>
А> unsigned long x = ...
А> x = ((x << 16) | (x >> 16)) & 0xffffffffUL;
А>
unsigned long x = ...
x = ((x << (sizeof(x)<<4) ) | (x >> (sizeof(x)<<4))) & (unsigned long)(-1);
Re[3]: как моменять местами слова в unsigned long не использ
От:
Аноним
Дата:
12.11.03 09:12
Оценка:
Здравствуйте, id, Вы писали:
А>> unsigned long x = ...
А>> x = ((x << 16) | (x >> 16)) & 0xffffffffUL;
id> unsigned long x = ...
id> x = ((x << (sizeof(x)<<4) ) | (x >> (sizeof(x)<<4))) & (unsigned long)(-1);
Во-первых, как я понял, Вы пытались решить другую задачу. Во-вторых, при чем тут sizeof x? sizeof(unsigned long) не связан с количеством значащих двоичных разрядов в значениях этого типа. В-третьих, почему Вы решили, что приведение -1 к типу unsigned long должно давать максимальное беззнаковое значение?
Re[2]: как моменять местами слова в unsigned long не использ
От:
Аноним
Дата:
12.11.03 09:16
Оценка:
А> unsigned long x = ...
А> x = ((x << 16) | (x >> 16)) & 0xffffffffUL;
А зачем &0xffffffffUL ? Что-то с утра мозги туго ворочаются
Re[3]: как моменять местами слова в unsigned long не использ
От:
Аноним
Дата:
12.11.03 09:27
Оценка:
Здравствуйте, Аноним, Вы писали:
А>> unsigned long x = ...
А>> x = ((x << 16) | (x >> 16)) & 0xffffffffUL;
А>А зачем &0xffffffffUL ? Что-то с утра мозги туго ворочаются
В расчете на то, что в unsigned long может быть больше 32-х значащих битов.
P.S. Да, этот код рассчитывает на то, что в младших 32-х битах x — значение, а старшие (если они есть) нулевые.
Re[4]: как моменять местами слова в unsigned long не использ
От:
Аноним
Дата:
12.11.03 09:35
Оценка:
OK
Re[3]: как моменять местами слова в unsigned long не использ
Прямой путь к неопределенному поведению. Не только запись в один член объединения,
а чтение из другого не гарантируется, но даже такая банальная вещь, как
выравнивание может внести свою лепту в уверенное "падение" данной программы.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: как моменять местами слова в unsigned long не использ
Здравствуйте, adontz, Вы писали:
aik>>ответ неверный. ему надо чтобы 0x12345678 стало 0x56781234, а не 0x78563412. A>Прогоните эти функции и сами посмотрите что они делают