将十六进制转换为 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 中以正确格式将字符串数据转换为十进制时出现问题