![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
vanvo |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос наверняка жутко глупый, но не получается корректно записать, а затем считать числа.
Оператор << с ulong'ом не работает, а явное приведение типа к поддерживаемым приводит к вылетанию программы. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а если unsigned long long?
|
|
|
vanvo |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 18.8.2008 Пользователь №: 267 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Авварон |
![]()
Сообщение
#4
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
а если unsigned long long? Пробовал явно приводить
но тогда программа вылетает... Менять тип переменной number нежелательно. А никак нельзя записать "чистый" unsigned long?
//Mac Os 10.6, qt 4.5 |
|
|
BRE |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
На разных платформах 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 |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Тип long вообще не одноразмерный, он может быть 32 бита и больше. Это не допустимо в сериализации данных, где нужно знать точные размеры. Иначе придется еще к каждому числовому типу дополнительный байт размера приписывать.
Вылет происходит уже после загрузки 64 битного числа из потока в ulong? Проверь значения до записи в поток и после получения. Может быть число что-то теряет при приведении типа. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Для проверки можно так сделать:
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 18.6.2025, 15:35 |