Отсутствует один бит при преобразовании строки в двоичный файл - PullRequest
0 голосов
/ 16 мая 2018

Я пытался реализовать функцию, которая принимает строку и возвращает строку, состоящую из битов. Я перебираю представление 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 @"

Есть ли способ это исправить?

1 Ответ

0 голосов
/ 16 мая 2018

Как отметил @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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...