2017-01-24 4 views
0

16 진수 바이트 형식 (예 : ffd0)으로 표시하려는 합계 대신 ASCII 문자를 계속 덤프하므로 문자를 QString으로 변환하는 데 문제가 있습니다.QString 변환에 대한 문자의 ASCII 문자 처리


I 가진 코드 산책의 비트 - I는 QByteArray이고 I 만든 체크섬 함수에 의해 작동되는 16 진수 값 (A1-B2-C3)의 스트링을 갖는다. 출력은 체크섬 바이트 (ffd0)이며 터미널에 적절하게 인쇄됩니다 (printf("%x", checkSum(output)); ).하지만 Qt의 UI 기능을 사용할 때 쓰레기가 인쇄됩니다.

Qt Creator에서 가장 효율적인 방법은 무엇입니까? "￐"(Nonsenical 아스키하고, 때로는 ocasional -

레이블 :

입력 :

A1-B2-C3 

출력 여기


은 몇 가지 추가 설명입니다 카타카나 및 히라가나, 순전히 입력 한 헥사에 따라)

의 printf - (적절한 출력과 내가 라벨과 lineEdit의 텍스트로 설정하고 싶은 것입니다) ffd0


코드 비트 :

char MainWindow::checkSum(QByteArray &b) 
{ 
    char val = 0x00; 
    char i; 
    foreach (i, b) 
    { 
     val ^= i; 
    } 

    return val; 
} 

... 

QChar resultCh = checkSum(output); 

     ui->lineEdit->setText(resultCh); 
     ui->outputLabel->setText(resultCh); 

     printf("%x\n", resultCh); 
... 
+0

문제는 사용자의 checkSum이 실제로 문자가 아닙니다. 8 비트 길이의 부호있는 정수입니다. 그 부호있는 정수를 텍스트 문자열로 변환해야합니다. 유니 코드 문자로 처리하지 마십시오. –

답변

1

올바른 결과는 ffd0이 아니라 d0입니다.

char에서 QChar으로 복사하는 이유는 무엇입니까?

printf("%x", resultCh.unicode()); 

과 : 어떤 이유로, 당신은 여전히이 작업을 수행하려는 경우에 , 당신은 그것을 사용하기 전에 유니 코드 값으로 변환해야합니다 printf("%x", resultCh); 당신에게 큰를 제공해야

ui->lineEdit->setText(QString("%1").arg(resultCh.unicode(), 0, 16)); 

하는 것으로 컴파일하는 동안 경고.