Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > вывод char


Автор: ConverterDU 29.4.2011, 13:07
подскажите как вывести содержание массива в консоли и в QMessageBox? В массиве серийный номер, там буквы, цифры и знаки -.....по идее.
пишу так, он выводит всякие значки...
Код

         char SerNo[12]
    QMessageBox::information(this, "CamCap",SerNo);


Добавлено через 2 минуты и 21 секунду
и как unsigned char  вывести с помощью QMessageBox?

Автор: ecspertiza 29.4.2011, 13:31
Ну наверное как то так

Код

     QMessageBox::information(this, "CamCap",QString(SerNo));
     qDebug() << SerNo;
     std::cout << SerNo  << std::endl; 


не тестил правда

Автор: borisbn 29.4.2011, 13:32
ConverterDU, правильно ли я понимаю, что у тебя в массиве лежат какие-то числа, а тебе их нужно вывести в качестве строки ?
Если да, то так
Код

char SerNo[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
QString str;
for ( int i = 0; i < 12; i++) {
    str.append( QString::number( (int)SerNo[ i ] ) + " " );
}

Цитата(ConverterDU @  29.4.2011,  13:07 Найти цитируемый пост)
и как unsigned char  вывести с помощью QMessageBox?

Код

unsigned char x = 42;
QString str = QString::number( (int)x );


Автор: ConverterDU 29.4.2011, 14:46
если писать так

Код

QString str;
            for ( int i = 0; i < 12; i++) {
                str.append( QString::number( (int)SerNo[ i ] ) + " " );
            }
            QMessageBox::information(this, "CamCap",SerNo);



вот что выводит: "З©4ÿ"! Я не знаю что там, буквы и цифры по-ходу дела!
Может, я не правильно написал?


Автор: borisbn 29.4.2011, 14:51
ConverterDU
Цитата

 QMessageBox::information(this, "CamCap", str);

Автор: ConverterDU 29.4.2011, 15:00
вывел "-80 -111 42 89 -1 127 0 0 21 9 -92 -68 ", почему так много чисел, если массив из 12 состоит?

Добавлено через 8 минут и 41 секунду
А, ну как раз 12 групп получается....эх...

Спасибо всем за помощь огромное!

Автор: ConverterDU 29.4.2011, 15:28
нет, это неверный номер.....должны быть цифры....10 цифр....он какую то комбинацию сам генерирует...

Добавлено @ 15:37
Цитата



    
unsigned char x = 42;
QString str = QString::number( (int)x );




borisbn,  в unsigned char должны быть слова у меня, а не цифры... smile 

Автор: borisbn 29.4.2011, 15:51
ConverterDU, ты совсем запутал smile
приведи пример того, что лежит в массиве из 12 char и того, как бы ты хотел, чтобы это выглядело в строке

Автор: ConverterDU 29.4.2011, 16:08
у камеры есть такая функция:  INT is_GetCameraInfo (HIDS hCam, CAMINFO* pInfo)

она мне дает структуру данных CAMINFO, которая содержит в себе помимо всего прочего:

char                     -   SerNo[12]   -      Seriennummer der Kamera
unsigned char   -    Type           -       Kameratyp:
                                                              IS_CAMERA_TYPE_UEYE_USB_SE
                                                              IS_CAMERA_TYPE_UEYE_USB_ME
                                                               и т.д...

Я написал:

Код

void CamCapMainWindow::CamInfo() {
char SerNo[12];
    if (is_GetCameraInfo (hCam, &pInfo)==IS_SUCCESS) {
        QString str;
            for ( int i = 0; i < 12; i++) {
                str.append( QString::number( (char)SerNo[ i ] ));
            }
                   QMessageBox::information(this, "CamCap",str);
        
                       } else {
                              QMessageBox::warning(this, "CamCap", "Error");
                      }                 
}
 smile

Добавлено @ 16:11
должно быть: 4002780010 smile 

Автор: borisbn 29.4.2011, 16:19


ConverterDU, если ты имеешь в виду шестнадцатеричное представление этих 12-ти байт, то должно быть так
Код

QString str;
for ( int i = 0; i < 12; i++) {
    str.append( QString::number( (int)SerNo[ i ], 16 ) );
}

для твоего примера 
"-80 -111 42 89 -1 127 0 0 21 9 -92 -68 "
будет так
Цитата

b0912a59ff7f00001509a4bc


Автор: ConverterDU 29.4.2011, 16:28
Цитата

ConverterDU, если ты имеешь в виду шестнадцатеричное представление


да нет, десятичное представление должно быть....должно получиться конкретное число - 4002780010...

Добавлено через 1 минуту и 52 секунды
странный он набор числел выдает....

Добавлено через 3 минуты и 48 секунд
причем каждый раз набор разный....

Автор: borisbn 29.4.2011, 19:02
Цитата(ConverterDU @  29.4.2011,  16:28 Найти цитируемый пост)
десятичное представление должно быть

тогда так
Код

   unsigned long long * p = (unsigned long long *)SerNo;
   QString str = QString::number( *p );


смотри, в этом SerNo лежит 12 байт. Представь, что в первом байте лежит число 1, во втором 2 и т.д. Что ты хочешь увидеть в строке ? 

Автор: bsa 29.4.2011, 20:42
Цитата(borisbn @  29.4.2011,  16:19 Найти цитируемый пост)
QString str;
for ( int i = 0; i < 12; i++) {
    str.append( QString::number( (int)SerNo[ i ], 16 ) );
}
Ну ты извращенец:
Код
QString serialStr = QByteArray(SerNo, 16).toHex();

Автор: borisbn 30.4.2011, 09:15
bsa, уууупс, не знал. Ну, во-первых нужны не 16 байт, а 12, а во-вторых в моём варианте лёгким движением руки © можно в двадцатисемиричную систему перевести smile smile smile

Автор: ConverterDU 1.5.2011, 19:57
Цитата

смотри, в этом SerNo лежит 12 байт. Представь, что в первом байте лежит число 1, во втором 2 и т.д. Что ты хочешь увидеть в строке ?  

может, мы немного не поняли друг друга, но я же говорю, вот этот номер - 4002780010.

Я перепробовал все ваши варианты и они работают, если самому массив забить.....но с SerNo какая-то хрень, зла не хватает....функция то работает....выводит что угодно, но не серийник....видимо, сама функция глючит, все же....

Добавлено через 19 секунд
спасибо, за помощь..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)