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

Re: Как это понимать



On Fri, May 06, 2005 at 01:43:58AM +0300, Dmitry Nezhevenko wrote:
> > > Victor Wagner убедил меня, читаю побайтно а затем аккуратно
> > > собираю все целые числа из байтов с помощью сдвигов и сложения.
> > Хмм, а почему сразу не читать в переменные short/long, а байты
> > переставлять только при необходимости?
> Просто разные архитектуры по разному представляют числа в памяти. Т.е
> на одной системе число 0x1234 (short) будет в памяти (а соответственно
> и при чтении) как 2 байта: 0x12 0x34, а на другой: 0x34 0x12

Ну и что? Пишется макрос типа

#define SWAP16(x) \
        ((short)( \
            (((short)(x) & 0x00ffU) << 8) | \
            (((short)(x) & 0xff00U) >> 8) ))

А потом делается

#ifdef HOST_BIGENDIAN
# define MSBWORD16(x)      (x)
# define LSBWORD16(x)      SWAP16(x)
#else
# define LSBWORD16(x)      (x)
# define MSBWORD16(x)      SWAP16(x)
#endif

а при чтении из файла используются эти макросы. То же для всех
остальныъх типов.

-- 
Andrey V. Kiselev
Home phone:  +7 812 5970603  ICQ# 26871517



Reply to: