2017-08-14 360 views
0

我想將十六進制值轉換爲十進制。所以我試過了。當值大於0時,它工作正常。但是當值爲< 0時,則返回錯誤值。在Swift中將十六進制轉換爲十進制

let h2 = 「0373」 
let d4 = Int(h2, radix: 16)! 
print(d4) // 883 

let h3 = 「FF88」 
let d5 = Int(h3, radix: 16)! 
print(d5) // 65416 

當我通過FF88時,它返回65416.但實際上它是-120。

現在,我正在關注此Convert between Decimal, Binary and Hexadecimal in Swift答案。但它並不總是如此。

請檢查這個對話online。有關此對話的更多詳細信息,請參閱以下圖片。

enter image description here

有從十六進制值的獲取減​​去十進制任何其他解決方案?

任何幫助將不勝感激!

回答

2

FF 88是簽署整數 -12016位的十六進制表示。你可以先創建一個無符號整數,然後 將其轉換爲簽名的副本與同位模式:

let h3 = "FF88" 
let u3 = UInt16(h3, radix: 16)! // 65416 
let s3 = Int16(bitPattern: u3) // -120 
1

十六進制轉換取決於整數類型(signed , unsigned),大小(64 bits , 32 bits , 16 bits . .),這是你錯過了什麼。

源代碼:

let h3 = "FF88" 
let d5 = Int16(truncatingBitPattern: strtoul(h3, nil, 16)) 
print(d5) // -120 
相關問題