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 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]