Конвертировать массив CChar в строку Hexa в Swift - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть массив CChar

var buff = [CChar](repeating: 0, count: 10)

, и я хочу преобразовать массив CChar в строку . Я попробовал следующий способ,

let string = String(bytes: buff, encoding: .utf8)

, но выдает ошибку: Initializer 'init(bytes:encoding:)' requires the types 'CChar' (aka 'Int8') and 'UInt8' be equivalent

Примечание: ожидается, что полученная строка будет шестнадцатеричной строкой

любая помощь приветствуется.

---------------------- ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ---------- --------------------

на самом деле я переношу свои изменения с Java на Swift, (Android до iOS) я читаю некоторые http traffi c как байты, и поэтому buff , очевидно, содержит прочитанные байты.

Результирующий бафф Array может быть:

buff[CChar] = [56, 54, 45, -103, 95, -59]

1 Ответ

0 голосов
/ 21 апреля 2020

Что вам нужно, так это инициализатор Swift cString :

init(cString: UnsafePointer<CChar>)

Если cString содержит некорректно сформированные последовательности кодовых единиц UTF-8, этот инициализатор заменяет их символом замены Unicode ("\ u {FFFD}").


let buff: [CChar] = [97, 98, 99, 0] // null-terminated string 
let string: String = .init(cString: buff) 
print(string)    // "abc\n"

редактирование / обновление:

Чтобы преобразовать [CChar] в hexaString, вам нужно отобразить свой bitPattern и использовать формат строки: «% 02x» для преобразования байтов в гекса:

let buff: [CChar] = [56, 54, 45, -103, 95, -59]
let hexaString = buff.map {
    String(format: "%02x", UInt8(bitPattern: $0))
}.joined()

print(hexaString)  // "38362d995fc5\n"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...