2016-12-01 43 views
0

我有一个问题,一直在窃听一个多小时,并决定只是在这里问。有没有适当的方式将QByteArray转换为char?我设法使它作为char *工作,但我需要将它作为char来传递。QByteArray转换为char(不是char *或constChar *)

下面是一个代码位,我走的QByteArray,并将其转换为char *:

QByteArray MainWindow::checkSum(QByteArray &b) 
    { 
     qint16 b_len = b.length(); 

     char xor = 0; 

     for (int i = 0 ; i < b_len ; i ++) 
     { 
      xor = xor^b[i]; 
     } 

     return b; 
    } 

    void MainWindow::on_flipHorzButton_clicked() 
    { 
     // getFirmwareVersion = { 0xe6, 0x05, 0x12, 0x00} 
     QByteArray str; 

     char ch = checkSum(str).data(); 

     str[0] =0xaa; 
     str[1] =0xbb; 
     str[2] =0xcc; 
     str[3] =0xdd; 
     str[4] = ch; 
     printf("%s", str[4]); 
     serial.write(str, 5); 
} 

我应该尝试转换CH为char?如果是,我该怎么做?

+2

这是有点不清楚你想要什么。只是字符 - 是1个字符 – Starl1ght

+0

我正在添加额外的代码。给我一秒钟。 :) –

+0

为什么?你想要一个*单个字符*为什么?一个字符串如何能适合'char'提供的单个字节?什么是你想解决的*实际*问题([关于XY问题的相关阅读](http://xyproblem.info/))? –

回答

1

出于某种原因,我必须将“xor”重命名为其他内容。

为了您的具体问题,你必须改变该行:

char ch = checkSum(str).data()[0]; 

所以它返回的char *从第一个字符的QByteArray

+0

它工作!非常感谢!!! –

+1

正如PsiX也指出,小心你的“异或”。这是一个保留字,可能会在将来引发问题。 –

0

您的代码不为XOR工作是保留关键字:xor 将变量重命名为其他内容。