【问题标题】:Convert hex to decimal in swift快速将十六进制转换为十进制
【发布时间】:2016-06-14 20:03:24
【问题描述】:

如何快速将十六进制转换为十进制?

我有字符串“423fdf4dfb1115”,我需要得到这个 => 18647576781459733。

我试试这个:

let result = UInt8(strtoul("423fdf4dfb1115", nil, 16)) 

但应用崩溃...

我使用这个在线转换: http://www.binaryhexconverter.com/hex-to-decimal-converter

【问题讨论】:

  • 你需要遍历字符串
  • 为什么要将结果转换为 UInt8?你有一个非常大的数字,它不可能适合一个小的 UInt8。
  • 您提供的十六进制数 (423fdf4dfb1115) 是 18,596,864,257,291,000。我在 excel(单元格 x 16^0)中证明了这一点,并为每个数字增加一个,并对每个数字的结果求和。

标签: ios xcode swift hex


【解决方案1】:

结果必须是UInt64(UInt8.max 是 255)。

有一个方便的初始化器,不需要strtoul。

let string = "423fdf4dfb1115"
let result = UInt64(string, radix:16)

【讨论】:

  • 很酷的把戏。我不知道那个初始化程序。它需要任何有效的基数吗? (基数为 37,即使出于某种奇怪的原因您想要它?)并且是否有相应的方法可以将整数类的值输出为给定基数中的字符串?
  • @DuncanC 我想是的。是的,String 具有类似的初始化程序,例如 print(String(999_999, radix: 16)) // "f423f"。甚至还有一个可选的uppercase 参数来获取F423F。
【解决方案2】:

let result = UInt64(strtoul("423fdf4dfb1115", nil, 16))

【讨论】:

    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多