Swift:Reversing a Hex string [已关闭]

kgsdhlau  于 2023-04-04  发布在  Swift
关注(0)|答案(1)|浏览(234)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

这个问题似乎与help center中定义的范围内的编程无关。
11天前关闭。
Improve this question
所以我写了一些swift代码来反转十六进制字符串,但我觉得一定有一种更优雅的方法来做。
输入:“FCDB4B42”输出“424BDBFC”

var string2 = "FCDB4B42" 
// reverse the bytes
print (string2)
var string3 = ""
for i in stride(from: 1, to: string2.count, by: 2).reversed() {
    string3 = string3 + string2[i - 1] + string2[i]
}

print(string3) // 424BDBFC

extension String {
    subscript(idx: Int) -> String {
        String(self[index(startIndex, offsetBy: idx)])
    }
}

目的是成对反转它,以更优雅的方式保留字节值(通常有比ForNext循环更好的方法)。

wribegjk

wribegjk1#

我不确定它是否更好,但这避免了使用扩展来添加下标运算符:

extension String {
    func hexReversed() -> String {
        guard count > 2 else { return self }

        var result = ""
        var end = endIndex
   
        while let start = index(end, offsetBy: -2, limitedBy: startIndex) {
            result += self[start..<end]
            end = start
        }
   
        return result
    }
}

func test(_ string: String) {
    print("'\(string)' -> '\(string.hexReversed())'")
} 

test("")
test("F")
test("FC")
test("FCD")
test("FCDB4B4")
test("FCDB4B42")

还有指纹

'' -> ''
'F' -> 'F'
'FC' -> 'FC'
'FCD' -> 'CD'
'FCDB4B4' -> 'B4B4CD'
'FCDB4B42' -> '424BDBFC'

对于长度为奇数的字符串应该发生什么可能是有争议的:抛出一个错误,返回nil,或者稍微优雅地失败。我选择了后者,如果字符串长度是奇数,将删除第一个字符。我认为原始的解决方案将删除最后一个字符。

相关问题