Запись unsigned long в бинарный файл |
Здравствуйте, гость ( Вход | Регистрация )
Запись unsigned long в бинарный файл |
vanvo |
30.10.2009, 21:24
Сообщение
#1
|
Студент Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вопрос наверняка жутко глупый, но не получается корректно записать, а затем считать числа.
Оператор << с ulong'ом не работает, а явное приведение типа к поддерживаемым приводит к вылетанию программы. |
|
|
Litkevich Yuriy |
30.10.2009, 21:32
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а если unsigned long long?
|
|
|
vanvo |
30.10.2009, 21:41
Сообщение
#3
|
Студент Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Авварон |
30.10.2009, 22:18
Сообщение
#4
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
а если unsigned long long? Пробовал явно приводить
но тогда программа вылетает... Менять тип переменной number нежелательно. А никак нельзя записать "чистый" unsigned long?
//Mac Os 10.6, qt 4.5 |
|
|
BRE |
30.10.2009, 22:21
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
На разных платформах long может иметь разный размер.
На 32 битной - 4 байта, на 64 битной - 8 байт. Поэтому лучше использовать переменные с заданной размерностью (quint32/quint64). Посмотри размер твоего unsigned long. qDebug() << sizeof( unsigned long ); Или использовать raw-data: int QDataStream::writeRawData ( const char * s, int len ) int QDataStream::readRawData ( char * s, int len )
|
|
|
SABROG |
30.10.2009, 22:22
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Тип long вообще не одноразмерный, он может быть 32 бита и больше. Это не допустимо в сериализации данных, где нужно знать точные размеры. Иначе придется еще к каждому числовому типу дополнительный байт размера приписывать.
Вылет происходит уже после загрузки 64 битного числа из потока в ulong? Проверь значения до записи в поток и после получения. Может быть число что-то теряет при приведении типа. |
|
|
Litkevich Yuriy |
30.10.2009, 23:29
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Для проверки можно так сделать:
|
|
|
Текстовая версия | Сейчас: 29.3.2024, 16:11 |