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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QChar to Hex  (Прочитано 8186 раз)
berik.kz
Гость
« : Октябрь 02, 2009, 13:09 »

Здравствуйте.
Как можно считать с файла(in.txt) символы(µbX3ђ•C?Е- »F[уоBњAёХя¦„) и выложить их в файл(out.txt) виде Hex(b562 и т.п)
Проблема следующая.Когда я начинаю считывать каждый символ и загоняю его в QByteArray,то в QByteArray он неправильно(если не распознал,то символ=?) отображается,а,следовательно при использовании метода toHex() он неправильно выводит в out.txt
Если считываю каждый символ и загоняю в QStringList,то все нормально,но не могу перевести символы в HEX. Как быть?  Плачущий

Код:
in_file.open(QIODevice::ReadOnly);
out_file.open(QIODevice::WriteOnly);\
QTextStream in(&in_file);
QTextStream out(&out_file);

QChar ch;
QByteArray ba;
QStringList arr;

while(!in.atEnd()){
in>>ch;
ba+=ch;
arr<<ch;
}

for(int i=0;i<ba.size();i++){
qDebug() << arr[i] <<":"<< ba[i];
}

результат :
arr "µ" "X" "ђ" "•" выводить правильно,но не знаю как перевести каждый символ в HEX
ba µ   X   ?   ? выводить неправильно символы.
Записан
spirit
Гость
« Ответ #1 : Октябрь 02, 2009, 13:19 »

см.  QString::toInt, второй параметр метода -- это система исчисления.
Записан
berik.kz
Гость
« Ответ #2 : Октябрь 02, 2009, 13:35 »

Не совсем понятно  Смеющийся
Как можно из символа 'µ' перевести в hex использую метод QString::toInt(bool *ok,int base_type) ?

Код:
bool ok;
QString num="µ";
qDebug() << num.toInt(&ok,16);

Result

0
Записан
spirit
Гость
« Ответ #3 : Октябрь 02, 2009, 13:38 »

char к int привести нельзя разве?
к тому же есть метод QChar::unicode.
Записан
shadone
Гость
« Ответ #4 : Октябрь 02, 2009, 13:57 »

зачем в данном случае промежуточные преобразования в QChar?
Просто читайте из QFile в QByteArray (который просто набор байтов, а не текст) и выводите его в нужном формате.

что-то вроде

QString result;
QTextStream stream(&result);

QFile file;
// file.open(), etc
static const int MaxBytesRead = 1024;
while(!file.atEnd()) {
    QByteArray data = file.read(MaxBytesRead);
    for(int i = 0; i < data.size(); ++i) {
        stream << QString::number(data.at(i), 16);
    }
}
Записан
BRE
Гость
« Ответ #5 : Октябрь 02, 2009, 14:07 »

Или
Код
C++ (Qt)
QFile in;
in.open( ... );
QByteArray inData = in.readAll();
QByteArray outData = inData.toHex();
qDebug() << outData;
 
QFile out;
out.open( ... );
out.write( outData );
 

Но если объемы файлов данных большие, то несомненно лучше данные обрабатывать chunk'ами.
« Последнее редактирование: Октябрь 02, 2009, 16:10 от BRE » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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