Re: Как это понимать
Andrey Kiselev -> debian-russian@lists.debian.org @ Fri, 6 May 2005 08:45:10 +0400:
>> > > Victor Wagner убедил меня, читаю побайтно а затем аккуратно
>> > > собираю все целые числа из байтов с помощью сдвигов и сложения.
>> > Хмм, а почему сразу не читать в переменные short/long, а байты
>> > переставлять только при необходимости?
>> Просто разные архитектуры по разному представляют числа в памяти. Т.е
>> на одной системе число 0x1234 (short) будет в памяти (а соответственно
>> и при чтении) как 2 байта: 0x12 0x34, а на другой: 0x34 0x12
AK> Ну и что? Пишется макрос типа
AK> #define SWAP16(x) \
AK> ((short)( \
AK> (((short)(x) & 0x00ffU) << 8) | \
AK> (((short)(x) & 0xff00U) >> 8) ))
AK> А потом делается
AK> #ifdef HOST_BIGENDIAN
AK> # define MSBWORD16(x) (x)
AK> # define LSBWORD16(x) SWAP16(x)
AK> #else
AK> # define LSBWORD16(x) (x)
AK> # define MSBWORD16(x) SWAP16(x)
AK> #endif
AK> а при чтении из файла используются эти макросы. То же для всех
AK> остальныъх типов.
Ну и чем бы это лучше, чем побайтно?
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Intel - тоже Сильмарилл. Только сделанный не так...
Reply to: