Qt中int型轉化為16進位制後形成QString型時,int型資料為負需要轉化為其補碼時的操作
阿新 • • 發佈:2019-01-28
Qt的的的中封裝了內部函式可以直接將INT型轉化為16進位制,字串表示
int suanz = 10000;
QString str = QString("%1").arg(suanz,4,16,QLatin1Char('0'));
執行完此操作後suanz變為了QString型,將str輸出發現其為“2780”,輸出正確
該函式QString QString :: arg(int a,int fieldWidth = 0,int base = 10,QChar fillChar = QLatin1Char(''))const
中幾個引數一個表示待轉換的資料,fieldwidth表示轉化後STR的長度,基部表示轉化的進位制數,可以為預設的10進位制,也可以為16進位制,8進位制,2進位制等,最後表示空餘位置所補的字元。
但是該函式在執行過程中有一個問題,就是如果INT型資料為負(-10000),其長度不能按照fieldwidth輸出:
但是觀察發現其最後4為為-10000的補碼輸出,故在原函式後面進行處理,取其後4位作為輸出,問題解決
QString("%1").arg(suanz,4,16,QLatin1Char('0')).right(4);
當然也可以計算出要轉換的資料的補碼對應的值再使用ARG函式也可實現功能