我有一小部分代码,如下所示:
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"呢?我的代码怎么了?
存在问题uint8最大数字是1024。0427= 1063>1024。因此它不起作用。更改以下:
let value = Int(strtoul(batt, nil, 16))