2012-09-04 2 views
5

i2c 장치의 레지스터를 읽었으며 반환 값의 범위는 부호있는 정수 -32768 ~ 32768입니다. 아래의 예는 다음과 같습니다 Qt는에서Qt 음수 16 진수 문자열을 부호있는 정수로 변환

# i2cget -y 3 0x0b 0x0a w 
0xfec7 

,이 값 (0xfec7)을 얻을 부호있는 정수로 QLabel에 표시하고자합니다. 변수 stringListSplit [0]은 값이 '0xfec7'인 QString입니다.

// Now update the label 
int milAmps = stringListSplit[0].toInt(0,16); // tried qint32 
qDebug() << milAmps; 

문제는 상관없이 내가 항상 부호없는 정수를 얻을 시도는 무엇입니까 내가 지정된 최대 반환 값을 초과하는 65,223 무엇입니까이 그래서 예를 들면. 16 진수 값을 부호있는 정수로 변환해야하므로 16 진수 값을 2의 보수로 표시해야합니다. 나는 QString 문서에서 간단한 메소드를 보지 않을 것이다. Qt에서 어떻게 이것을 할 수 있습니까?

참고

QString은 :: toShort 0 반환

// Now update the label 
short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << "My new result: " << milAmps; 

stringListSplit의 입력 [0] 0xfebe '같 I가 -322의 출력을 얻기 위해, C-을 사용 스타일 키스는 키스가 대답했습니다.

// Now update the label 
int milAmps = stringListSplit[0].toInt(0,16); 
qDebug() << "My new result: " << (int16_t)milAmps; 

답변

3

결과를 부호있는 16 비트 정수로 변환합니다.

qDebug() << (int16_t)milAmps; 
+0

C 스타일 캐스팅을 절대 사용하지 마십시오.) – fasked

+0

@fasked : 예 , 오래된 습관이 힘들어 ... 이제 내 잔디에서 내려! –

+0

잘 감사드립니다 이것이 작동하는 것 같습니다. 그러나 이것이 안전하지 않거나 눈살을 찌푸리게 할 어떤 이유가 있습니까? – PhilBot

4

이 문자열을 16 비트 정수로 변환해야합니다. 대체로 QString::toShort 방법을 사용할 수 있습니다.

short milAmps = stringListSplit[0].toShort(0,16); 
qDebug() << milAmps; 
+0

이것은 0을 인쇄합니다. 왜 그런가? – PhilBot

+0

'toShort' 메소드는 에러가 발생하면'0'을 반환 할 수 있습니다. 'stringListSplit [0]'이 올바른 문자열입니까? – fasked

+0

아마도 입력이 범위를 벗어나고 있다고 불평 할 것입니다. 정수로 구문 분석하고이를 내 보내야합니다. –

관련 문제