在Swift中将十六进制转换为十进制

4

如何在Swift中将十六进制转换为十进制?

我有一个字符串“423fdf4dfb1115”,需要将其转换为“18647576781459733”。

我尝试了以下代码:

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

但是应用程序崩溃了...

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


你需要循环遍历字符串。 - haitham
2
你为什么要将结果转换成UInt8?你有一个非常大的数字,它绝对无法适应一个微小的UInt8。 - Gruntcakes
您提供的十六进制数(423fdf4dfb1115)是18,596,864,257,291,000。我在Excel中证明了这一点(单元格x 16^0),并为每个数字递增了一个附加值,然后将结果进行了求和。 - Stevan
2个回答

10

结果必须是UInt64UInt8.max为255)。

有一个便利的初始化器,不需要使用strtoul

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

很棒的技巧。我不知道那个初始化器。它会接受任何有效的基数吗?(例如37进制,甚至是偶数,如果你有这样奇怪的需求?)并且是否有相应的方法可以将整数类的值以给定的基数输出为字符串? - Duncan C
@DuncanC 我也这么认为。是的,String 有类似的初始化器,例如 print(String(999_999, radix: 16)) // "f423f"。甚至还有一个可选的 uppercase 参数可以得到 F423F - vadian

2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接