十六进制到小数不工作的小数是不正确的:Swift



我有一小部分代码,如下所示:

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))

最新更新