gpt4 book ai didi

ios - 将 String 转换为二进制时缺少一位

转载 作者:行者123 更新时间:2023-11-28 10:08:47 26 4
gpt4 key购买 nike

我试图实现接受字符串并返回由位组成的字符串的函数。我正在遍历 String 的 utf8 表示并使用 reduce 附加下一个字母。问题是 Swift 没有添加前导位,所以我不得不手动添加它们。转换“abcd”、“fgh”等字符串时,它工作正常,但例如“abc d”生成的字符串缺少一位。

我的实现:

extension String {
func toBinary() -> String {

return self.utf8.reduce("", { (result, ui) -> String in
result + "0" + String(utf, radix: 2)
})
}
}

和“abc d”.toBinary() 返回:

011000010110001001100011010000001100100 当正确的表示是:

0110000101100010011000110010000001100100

当我将二进制转换回字符串时,它对没有空格的字符串工作正常,但在这种情况下它返回不同的字符串,例如:“abc@”

有什么办法可以解决这个问题吗?

最佳答案

正如@rmaddy 在评论中指出的那样,您的代码假定 String(utf, radix: 2) 返回 7 个字符的结果。实际上,它可以返回 1 到 8 个字符的字符串。

解决这个问题的一种方法是将该字符串转换为 Int,然后使用前导零格式化该 Int:

extension String {
func toBinary() -> String {

return self.utf8.reduce("", { (result, utf) -> String in
result + String(format: "%08d", Int(String(utf, radix: 2))!)
})
}
}

测试:

print(" ".toBinary())
00100000

UInt8 到 8 字符二进制 String 的其他转换:

  1. String(("0000000"+ String(utf, radix: 2)).suffix(8))
  2. String(String(256 + Int(utf), radix: 2).dropFirst())

关于ios - 将 String 转换为二进制时缺少一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com