将十六进制转换为 Swift 格式的字符串以保持相同的位数

Posted

技术标签:

【中文标题】将十六进制转换为 Swift 格式的字符串以保持相同的位数【英文标题】:Converting a hex to string in Swift formatted to keep the same number of digits 【发布时间】:2017-09-05 16:49:15 【问题描述】:

我正在尝试从数组中的十六进制值创建一个字符串,但只要数组中的十六进制以零开头,它也会在结果字符串中消失。

我使用String(value:radix:uppercase) 创建字符串。


一个例子:

这是一个数组:[0x13245678, 0x12345678, 0x12345678, 0x12345678]。 这给了我字符串:12345678123456781234567812345678 (32 个字符)

但以下数组:[0x02345678, 0x12345678, 0x02345678, 0x12345678](请注意,我用零替换了两个 1)。 给我字符串:234567812345678234567812345678 (30 个字符)


我不确定为什么它会删除零。我知道 value 是正确的;如果它在那里,我该如何格式化它以保持零?

【问题讨论】:

【参考方案1】:

0x01234567 这个数字其实就是0x1234567。数字文字中的前导零没有任何意义(除非您将前导 0 用于八进制数字文字)。

不要使用String(value:radix:uppercase),而是使用String(format:)

let num = 0x1234567
let str = String(format: "%08X", num)

格式说明:

0 表示根据需要用零填充字符串的左端。 8 表示您希望结果长度为 8 个字符 X 表示您希望将数字转换为大写十六进制。如果需要小写十六进制,请使用 x

【讨论】:

啊,太好了!正是在寻找这个。我找到了 Apple 的字符串格式说明符,但不知道我需要的 0 但是String(format:_:)需要导入Foundation,而String(_:radix:uppercase:)不需要。

以上是关于将十六进制转换为 Swift 格式的字符串以保持相同的位数的主要内容,如果未能解决你的问题,请参考以下文章

在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题

Swift将十六进制字符串或字符转换为整数

Swift3 将字符串值转换为十六进制字符串

swift 将十六进制字符串转换为UIColor

swift Swift数据扩展,支持将数据转换为十六进制呈现的字符串,并通过十六进制字符串构造数据

如何将RGB值转换为十六进制字符串iOS swift