Russian Qt Forum
Ноябрь 26, 2024, 05:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray to int/short (прочитать и разобрать 3ds файл.)  (Прочитано 8922 раз)
ieroglif
Гость
« : Июль 31, 2009, 11:55 »

пишу такой код
Код:
	QFile f(fileName);
f.open(QIODevice::ReadOnly);
fileData = f.readAll();
f.close();
bool ok;
qDebug() << fileData.mid(0,2).toShort(&ok,16) << " " << ok;

на выходе получаю "0 false" в то время как два символа там находящиеся - это "MM".
как их конвертнуть что бы получить сравнение с 0x4D4D ?
Записан
spectre71
Гость
« Ответ #1 : Июль 31, 2009, 12:42 »

пишу такой код
Код:
	QFile f(fileName);
f.open(QIODevice::ReadOnly);
fileData = f.readAll();
f.close();
bool ok;
qDebug() << fileData.mid(0,2).toShort(&ok,16) << " " << ok;

на выходе получаю "0 false" в то время как два символа там находящиеся - это "MM".
как их конвертнуть что бы получить сравнение с 0x4D4D ?
Веселый
"MM" - не является 16-чным представлением числа в строке! Естественно будет FALSE
Записан
ieroglif
Гость
« Ответ #2 : Июль 31, 2009, 12:54 »

пишу такой код
Код:
	QFile f(fileName);
f.open(QIODevice::ReadOnly);
fileData = f.readAll();
f.close();
bool ok;
qDebug() << fileData.mid(0,2).toShort(&ok,16) << " " << ok;

на выходе получаю "0 false" в то время как два символа там находящиеся - это "MM".
как их конвертнуть что бы получить сравнение с 0x4D4D ?
Веселый
"MM" - не является 16-чным представлением числа в строке! Естественно будет FALSE
поржать и я могу - ты на вопрос ответь - как их конвертнуть?
Записан
f-r-o-s-t
Гость
« Ответ #3 : Июль 31, 2009, 13:02 »

Он и ответил, как ты можешь "ММ" конвертнуть в 16ое число ?
Записан
denka
Гость
« Ответ #4 : Июль 31, 2009, 13:11 »

Код:
short dest;
qstrncpy((char *)&dest, fileData.mid(0,2).data(), sizeof(dest));
Записан
spectre71
Гость
« Ответ #5 : Июль 31, 2009, 13:13 »

1) Если что не получается смотри доку по методам которые используешь.
2) Учи C++
Ответ на твой вопрос неодназначен! Что такое "ММ"?
А если будет "AB" и "BА" - какой порядок байт должен быть?
Один из вариантов:

Код
C++ (Qt)
QFile f(fileName);
f.open(QIODevice::ReadOnly);
short val;
f.read((char*)&val, sizeof(val));
f.close();
Записан
spectre71
Гость
« Ответ #6 : Июль 31, 2009, 13:22 »

Код:
short dest;
qstrncpy((char *)&dest, fileData.mid(0,2).data(), sizeof(dest));
qstrncpy - нельзя! копирует до N или до первого 0x0.
Скорее так
short dest = *((short*)fileData.mid(0,sizeof(short)).data());
« Последнее редактирование: Июль 31, 2009, 13:40 от Spectre » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июль 31, 2009, 13:41 »

автор читает бинарное представление, с чего вы взяли, что MM - это текстовое 16-ричное число? Улыбающийся

ieroglif, функции toInt() и прочее предполагают, что в bytearray-e хранится текстовое представление числа, а не бинарное. Spectre показал как надо читать.
« Последнее редактирование: Июль 31, 2009, 13:46 от AX » Записан
f-r-o-s-t
Гость
« Ответ #8 : Июль 31, 2009, 13:42 »

автор читает бинарное представление, с чего вы взяли, что MM - это текст? Улыбающийся
Но преобразует то он именно из строки, по этому и сказали.
« Последнее редактирование: Июль 31, 2009, 13:44 от f-r-o-s-t » Записан
ieroglif
Гость
« Ответ #9 : Июль 31, 2009, 15:24 »

Spectre, спасибо. документацию читаю, язык учу, но всё сразу не получается.
AX, спасибо за понимание.
Записан
romank
Гость
« Ответ #10 : Июль 31, 2009, 16:01 »

Здесь можно изучить исходник загрузки 3DS

http://www.gamedev.ru/code/faq/?id=3576


Видимо так и сравнивается == 0x4D4D
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.