我有一小段代码,如下所示:
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”?我的代码出了什么问题?
答案 0 :(得分:2)
存在问题UInt8最大数量是1024. 0427 = 1063&gt; 1024.所以它不起作用。 改为:
let value = Int(strtoul(batt, nil, 16))