[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: