2014-04-24 2 views
0

Similar question 그러나 qt 솔루션을 찾고 있습니다.네거티브 8 비트 int의 Qt 16 진수 표현?

8 비트 음수 int를 16 진수 표현으로 변환하는 방법을 찾고 있습니다. 예제에서는 더 잘 설명 할 것입니다.

출력이 2 바이트를 훨씬 넘습니다.

그러나 부호가없는 것으로 변경하면 제대로 작동합니다.

quint8 width = - 100; 
qDebug() << QString::number(width, 16); 

// "9c" 

문서화 상태 :

quint8 typedef에 서명 숯불에 대한

으로 typedef. 이 유형은 Qt가 지원하는 모든 플랫폼에서 8 비트로 보장됩니다.


문자를 서명으로 typedef에 대한

qint8 형식 정의. 이 유형은 Qt에서 지원하는 모든 플랫폼에서 8 비트로 이됩니다.

음수를 처리 할 수 ​​없습니까?

답변

3

를 표시하는 문제는 QString::numberint 또는 uint 타입을 수용 할 수 있다는 것이다. 8 비트 정수에 대한 버전이 없으므로 더 큰 정수로 암시 적으로 형변환됩니다. 선행 0이 제거되므로 부호있는 정수로 잘 작동합니다.

QByteArray buffer; 
QDataStream stream(&buffer, QIODevice::WriteOnly); 
qint8 width = - 100; 
stream << width; 
qDebug() << buffer.toHex(); 
// output: "9c" 
:

당신은 그러나 QDataStream을 사용할 수 있습니다, 그것은 종류의 대형 다양한 operator <<을 제공합니다

1

QString::number에만 서명 승진 않지만 부호 비트를 확장하지 않습니다 그래서 두 번 width가 QINT 및 퀸트 RESP

서명되지 않은 홍보로 승진했다 int들과 long의 걸립니다.

QString::number says

염기는 기본적으로 10 및 10 이외의 염기 2 내지 36이어야 N 부호없는 정수로 간주되고 문서화. 확장 된 부호 비트를 의미

관련 문제