十六进制字符串到十进制不工作 - 某事不正确:swift

时间:2015-05-11 03:32:56

标签: 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”?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

存在问题UInt8最大数量是1024. 0427 = 1063&gt; 1024.所以它不起作用。 改为:

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