十六进制转十进制 - Swift

25
抱歉如果这似乎非常简单,但我在任何在线资源中都找不到。
我有一个16进制的UInt8,我需要将其转换为十进制。如何在Swift中实现?
例如:
“ff”
谢谢

(如果您所说的“十进制”是指真正的UInt8,例如255,而不是另一个带有十进制表示的字符串“255”) - Amadan
https://stackoverflow.com/q/45667905/3908884 - Meet Doshi
4个回答

54

如果您有一个字符串表示,"ff",您可以使用UInt8(_:radix:)

let string = "ff"
if let value = UInt8(string, radix: 16) {
    print(value)
}

最后一个代码可以运行,但有一个问题。所有的整数都正确,除了0。它返回nil而不是0,然后跳到1。有什么想法吗? - JoeBayLD
我修复了它。问题在于变量值:UInt8!我将其更改为变量值:UInt8 = 0。现在它可以工作了。 - JoeBayLD
好的,收到了。我会相应地更新我的答案。谢谢! - Rob
我简化了我的答案,从中删除了 strtoul - Rob
我有一个FFFF十六进制字符串,总共16位,所以我使用了UInt16,感谢快速回答。 - Arpit B Parekh

5
你可以使用函数strtoul将十六进制转换为十进制:
let result = UInt8(strtoul("ff", nil, 16))  // 255

可以的。还有一件事。如果我打印我的NSData,它会显示为<ff>。我可以将其转换为字符串并删除第一个和最后一个字符。但这是最好的方法吗? - JoeBayLD
2
@JoeBayLD 不需要获取字符串表示,然后将其转换为二进制。直接使用“getBytes”获取二进制数据即可。 - Rob
谢谢 @Rob 我刚找到这个,似乎有效。我会发布一个新问题,以确保它最有效。https://dev59.com/vV8e5IYBdhLWcg3wucb- - JoeBayLD

5

尝试这段代码,它对我有效。

// 十六进制转十进制

let h2 = "ff"
let d4 = Int(h2, radix: 16)!
print(d4) 

希望这对某些人有所帮助。

4
如果您的十六进制值不是字符串,而只是您想在编译时转换的内容,您也可以使用以下方法:
let integer : UInt8 = 0xff

所以在前面加上0x就可以完成任务。

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