Swift получает данные из UnsafeMutablePointer - PullRequest
0 голосов
/ 11 мая 2018

У меня есть функция objc, как показано ниже

-(char *)decrypt:(char *)crypt el:(int)el{}

когда я вызываю эту функцию из swift, возвращается UnsafeMutablePointer<Int8>. Теперь мне нужно получить данные из этого указателя. На выходе должна быть строка типа

"5c9f2cb88787fff26ca8a57982604460201805111017510011111111"

Я пробовал код ниже, чтобы получить значение

String(validatingUTF8: pointer)

Но он возвращает ноль. Как мне получить значение из этого UnsafeMutablePointer<Int8>?

Ответы [ 2 ]

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

Я собираюсь выйти здесь на конечность и предположить, что ваши char * на самом деле не указывают на данные UTF-8, а скорее на необработанные двоичные данные, из которых вы надеетесь получить шестнадцатеричное представление. Вы можете сделать это через:

// You'll need to know the length of the data. If it's null-terminated,
// read through the pointer until you hit a zero byte; otherwise, use whatever
// facility the API you're using provides to get the data length.
let buffer = UnsafeBufferPointer(start: $0, count: __insert_length_here__)

// and so:
let hexString = buffer.reduce(into: "") { $0 += String(format: "%02x", $1) }

print(hexString) // ta da!
0 голосов
/ 11 мая 2018

Лучше всего предположить, что данные не являются допустимой строкой UTF-8.

Если расшифровка не удалась, результат скорее всего является недействительным UTF-8, но это всего лишь диагностика.

Посмотрите на шестнадцатеричное представление и убедитесь, что оно допустимо, или используйте String(validatingUTF8: pointer), где значения, отличные от UTF-8, будут отображаться как символ ошибки Unicode: .

...