メッセージに文字ごとに 16 進数を表示したい (可能であれば簡単な方法で、文字をループして実行できることを知っています):
typedef struct{
double dTime;
char cMessage[11];
} typeCanMessage;
typeCanMessage cmMessage1 = {4.5, {0xd2, 0xf1, 0xe0, 0xf1, 0xf1, 0xf1, 0xf1, 0x23, 0x23, 0x23, 0x23}};
QMessageBox *msgBox = new QMessageBox(0);
msgBox->setGeometry(QRect(QPoint(200,200),QSize(400,400)));
msgBox->setInformativeText(QString::number(cmMessage1.dTime, 'f', 8) + " "
+ QString::number(cmMessage1.cMessage, 'x')); // <-- something like this perhaps
msgBox->exec();
エラー: 「オーバーロードされた 'number(char[11], char)' の呼び出しがあいまいです」
変形:
sprintf(cM, "%x", &cmMessage1.cMessage);
QMessageBox *msgBox = new QMessageBox(0);
msgBox->setGeometry(QRect(QPoint(200,200),QSize(400,400)));
msgBox->setInformativeText(QString::number(cmMessage1.dTime, 'f', 8) + " "
+ (QString)cM); // <-- something like this perhaps
msgBox->exec();
結果: bfb123d8 //間違っている
次のことを避けたい(ループまたはループなし):
sprintf(cM, "%X%X%X%X%X%X%X%X%X%X%X", cmMessage1.cMessage[0],
cmMessage1.cMessage[1],
cmMessage1.cMessage[2],
cmMessage1.cMessage[3],
cmMessage1.cMessage[4],
cmMessage1.cMessage[5],
cmMessage1.cMessage[6],
cmMessage1.cMessage[7],
cmMessage1.cMessage[8],
cmMessage1.cMessage[9],
cmMessage1.cMessage[10]);
ループ:
for(int i = 0; i < 11; i++){
sprintf(cM + 2 * i, "%X", cmMessage1.cMessage[i]);
}