1. 程式人生 > >Qt中int型轉化為16進位制後形成QString型時,int型資料為負需要轉化為其補碼時的操作

Qt中int型轉化為16進位制後形成QString型時,int型資料為負需要轉化為其補碼時的操作

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函式也可實現功能