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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将String转换为二进制时缺少一位相关的知识,希望对你有一定的参考价值。

我试图实现接受String的函数并返回由位组成的字符串。我正在遍历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

当我将二进制文件转换回String时,它对没有空格的字符串工作正常但在这种情况下它会返回不同的字符串,例如:“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())

以上是关于将String转换为二进制时缺少一位的主要内容,如果未能解决你的问题,请参考以下文章

OpenOffice Calc 使用许多单元格将二进制代码转换为十进制

如何在 delphi中十进制数的每一位变成二进制然后进行异或

matlab强制转换uint16转int16

10进制转2进制不够时在哪一位补0

如何将string类型的数字转换成int

PHP将字符串转换为十六进制和十六进制到字符串