Гость Опубликовано 13 октября, 2003 Жалоба Опубликовано 13 октября, 2003 Привет All!!! Не секрет, что в 32 разрядных операционных системах (таких как Linux), sizeof(int)=4. Что нужно сделать, чтоб вернуть int к размеру 16 бит (2 байта). Всеми местами чувствую, что это как-то делается с директивами препроцессора, а вот какими??? Цитата
Гость Опубликовано 13 октября, 2003 Жалоба Опубликовано 13 октября, 2003 >32 разрядных операционных системах (таких как Linux) Чушь. Система не может быть сколько-то разрядная. Иначе это плохая система. Разрядность зависит от архитектуры - на x86 - 32 бита, а на IA-64, например, 64 бита. >Что нужно сделать, чтоб вернуть int к размеру 16 бит (2 байта). Объясни, для чего тебе это нужно. В большинстве случаев зашивать зависимость от разрядности в программу - плохо, и почти всегда есть лучшие способы. В крайнем случае можно написать: typedef short int int_16; И потом пользоваться int_16, но short int не обязан быть 16 бит. Зато при переносе придется исправить только эту одну строчку. В стандарте C ничего не говорится о размерности типов данных. Гарантируется только что char <= short int <= int <= long int. Цитата
Гость Опубликовано 14 октября, 2003 Жалоба Опубликовано 14 октября, 2003 Можешь использовать типы определенные в библеотеке Glib. Цитата
Гость Опубликовано 14 октября, 2003 Жалоба Опубликовано 14 октября, 2003 Разумеется, никакими директивами тип int нельзя сделать 16-битным (если речь идет об gcc для x86) -- в том числе потому что gcc изначально ориентирован на как минимум 32-битную архитектуру. В принципе, конечно можно сделать так: -Dint=short в качестве опции компилятору -- но при этом, разумеется, нельзя использовать *ни одного* заголовочного файла, так что практическая ценность этого "приема" минимальна. Если нужны типы с гарантированной разрядностью -- в новом стандарте C (C99) они определены как: `int_t' и `uint_t' -- для их использования нужно подключать или . Но тут надо иметь в виду, что (1) далеко не все системы поддерживают С99 (gcc+glibc поддерживают с известными оговорками) (2) стандарт не требует чтобы эти типы существовали на каждой системе. Цитата
Гость Опубликовано 16 октября, 2003 Жалоба Опубликовано 16 октября, 2003 > Чушь. Система не может быть сколько-то разрядная. А ты попробуй сделать printf("%d",sizeof(int)) в досовском BorlandC, а потом в gcc. >Объясни, для чего тебе это нужно. Есть файл BMP который я хочу считать и обрабатывать. Нашел в нете его описание и собираюсь сделать библиотеку для работы с этим форматом. Но из-за разной размерности int и др типов в разных системах библиотека не будет универсальной типа struct my_struct{ int x; int y; }; теперь нужно считать из фаила fread-ом эту структуру, но из за разной размерности int в DOS будет считано 4 байта, а в Linux - 8 байт. Вот в этом-то и проблемка. Цитата
Гость Опубликовано 20 октября, 2003 Жалоба Опубликовано 20 октября, 2003 Вообще-то, на большинстве современных платформ 16-битный тип -- это short. Про новые типы C99 я уже говорил. На самом деле, обычно используется нечто вроде следующего: #ifdef HAVE_INT16_T typedef int16_t myint16; #elif SIZEOF_INT == 2 typedef int myint16; #elif SIZEOF_SHORT == 2 typedef short myint16; #else #error "No 16 bit type available" #endif На самом деле, я не очень понимаю, зачем делать библиотеку для работы с BMP -- да еще которая бы работала и в 16-битной среде. ImageMagick не катит? Можно, наверное, и что попроще найти. Цитата
Гость Опубликовано 23 октября, 2003 Жалоба Опубликовано 23 октября, 2003 Ты не тупи и переименуй в своей структуре все int на short. И все дела Цитата
Гость Опубликовано 25 октября, 2003 Жалоба Опубликовано 25 октября, 2003 unsigned short int; //Размер 2 байта Но зачем!!!! Есть же Double int;ayl писал(а): Цитата
Гость Опубликовано 29 ноября, 2003 Жалоба Опубликовано 29 ноября, 2003 #include .... int main() { u_int16_t } Переменная такого типа будет 16 разрядной в любом юнихе, но в винде и досе аналогов нет. В том же заголовочном файле есть определения и для чисел с другой разрядностью. Цитата
Гость Опубликовано 22 июня, 2004 Жалоба Опубликовано 22 июня, 2004 Наверное просто корректную библиотеку нужно использовать?.. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.