Я пишу программу для хранения данных в файл на блоке каждые 32 бита (т. Е. 4 байта за раз). Я написал код в 64-битной системе Windows, но использую компилятор 32 бита (mingw32). В текущей системе размер int long одинаковый, 32 бит (4 байта). В настоящее время я переношу код на другие системы, перекомпилируя с g ++ (без изменения кода). Однако я обнаружил, что размер int или long различен и зависит от системы. Так или иначе (например, использование макроса в файле заголовка), чтобы определить размер целого числа, чтобы решить, следует ли использовать int или long в качестве типа данных в коде? Я должен перекомпилировать код в 4 разных типах систем, это действительно головная боль, если я модифицирую код, чтобы иметь 4 разных копии для каждой системы.динамически определяет тип целого числа на основе системы (C++)
ответ
Что вы хотите сделать, это использовать стандартные типы, такие как int32_t
. Этот тип всегда 32 бит. В настоящее время я использую эти типы в переносной базе данных (berkeley db) для совместимости между системами.
См. here для всех них.
Включите stdint.h, чтобы получить эти определения.
Вы можете использовать sizeof (int) для определения размера целого числа.
Если вам нужен конкретный размер, то вы должны использовать int32_t (или int64_t) от stdint.h
Это общая проблема с каноническим решением является C99.
The <stdint.h>
header определяет набор типов, которые обеспечивают целые числа конкретных размеров, самых быстрых размеров и минимальных размеров. Это очень полезно при решении именно вашей проблемы.
Хорошо, что вы используете mingw32, потому что, к сожалению, в последний раз, когда я проверял, Microsoft не предоставляла stdint.h своим API. Если кому-то это нужно для Windows, есть версия с открытым исходным кодом, см: http://code.google.com/p/msinttypes/
ИМ лучший подход к этой проблеме, чтобы не использовать int
, long long
и т.д., но вместо независимых от платформы псевдонимов типа: int8_t
, int16_t
, int32_t
, int64_t
и т.д.
Они определены в <stdint.h>
- 1. Размер целого числа в C
- 2. Что определяет размер целого числа?
- 3. Поиск «следующих сообщений» на основе целого числа
- 4. Возвращение массива на основе целого числа
- 5. Конкатенация строк столбцов на основе целого числа
- 6. Сортировка списков на основе первого целого числа
- 7. C++ Удаление числа из целого числа
- 8. C++ перегруппировка целого числа
- 9. C++ Проверка целого числа.
- 10. Вызов функции динамически на основе целого значения
- 11. Тестирование целого числа в C++
- 12. Как я могу специализировать шаблон C++ для целого целого числа?
- 13. Форматирование целого числа в C++
- 14. raw_input на основе целого числа на двоичную программу
- 15. C: Формат определяет тип «символ *»
- 16. Добавить изображения динамически на основе случайного числа
- 17. Разбиение строки на основе целого числа, за которым следует пробел
- 18. Тип шаблона определяет тип
- 19. Разделение целого числа на меньшие целые числа
- 20. Создайте идентификатор на основе целого числа с буквой
- 21. Начальный вопрос - VB - изменить кнопку на основе целого числа
- 22. Как форматировать строки с отступом на основе целого числа?
- 23. Как удалить строки на основе целого числа n?
- 24. Обновление столбца до целого числа на основе datetime
- 25. SQL: генерировать приращение целого числа на основе значения другого столбца
- 26. Замените шаблон на основе целого числа в шаблоне в Vim
- 27. Добавить переменное количество конечных нулей на основе целого числа ввода
- 28. Автоматически установить флажок в true на основе целого числа
- 29. Разделение целого числа на Python?
- 30. Каков максимальный тип данных для хранения (и печати) целого числа?
Спасибо много. Я думаю, что это то, что я ищу :) – user1285419