Гость Опубликовано 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 Наверное просто корректную библиотеку нужно использовать?.. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.