2015-05-11 23 views
0

我有一個小小的一段代碼,如下圖所示:十六進制字符串到十進制沒有工作,什麼是不正確的:迅速

var str = "42042753 08b14f00 1852003f 8a86" 
var bre = str.substringWithRange(Range<String.Index>(start: advance(str.startIndex, 0), end: advance(str.endIndex, -29))) 
if bre == "42" { 
    var batt = str.substringWithRange(Range<String.Index>(start: advance(str.startIndex, 2), end: advance(str.endIndex, -25))) 
    println("\(batt)") 
    let value = UInt8(strtoul(batt, nil, 16)) 
    println("\(value)") 
} 

所有我想要做的是檢查,如果前兩個字符是「42」和如果是這樣,則將接下來的四個字符即「0427」轉換爲十進制「值」,並且它不起作用。我測試了let value = UInt8(strtoul("ff", nil, 16)),它工作正常並打印「255」。那麼爲什麼不是「0427」的「batt」轉換?我的代碼有什麼問題?

回答

2

有問題UInt8最大號碼是1024. 0427 = 1063> 1024.所以它不起作用。 更改爲此:

let value = Int(strtoul(batt, nil, 16)) 
+0

此問題已修復,謝謝。如果我想將「003f 8a68」修改爲十進制呢?我必須使用Int32嗎? –

+0

是的,必須使用Int32。 003f8a68 = 4164200和:INT16_MAX = 32767。 INT32_MAX = 2147483647 – Zhengjie

+0

實際上「Int」也起作用。 –

相關問題