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: