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」轉換?我的代碼有什麼問題?
此問題已修復,謝謝。如果我想將「003f 8a68」修改爲十進制呢?我必須使用Int32嗎? –
是的,必須使用Int32。 003f8a68 = 4164200和:INT16_MAX = 32767。 INT32_MAX = 2147483647 – Zhengjie
實際上「Int」也起作用。 –