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

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

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


一个例子:

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

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


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

【问题讨论】:

    标签: swift string int hex


    【解决方案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:)不需要。
    猜你喜欢
    • 2022-07-08
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2013-05-21
    • 2019-09-26
    • 2013-06-02
    相关资源
    最近更新 更多