2016-10-10 3 views
16

Я пытаюсь преобразовать строку в тип данных. Я думал, что это все, что мне нужно, но если я пытаюсь напечатать это он просто печатает «12 байт»преобразование строки в данные в swift 3.0

let tString = "Hello World!" 
if let newData = tString.data(using: String.Encoding.utf8){ 
    print(newData) 
    self.peripheral?.writeValue(newData, for: positionCharacteristic, type: CBCharacteristicWriteType.withResponse) 
} 

Что я делаю неправильно?

+0

Нет ничего плохого. Кстати, '.utf8' достаточно. – vadian

+0

См. Например http://stackoverflow.com/questions/39075043/how-to-convert-data-to-hex-string-in-swift или просто 'print (newData as NSData)'. –

+0

Причина, по которой он печатает 12 байт, занимает 12 байтов для хранения 12 символов в UTF8 (1 байт на символ для символов ASCII). –

ответ

9

Вы не совершаете ничего плохого. Именно так Data Data делает свою отладочную распечатку. Со временем это изменилось. Он временами печатался больше как NSData. В зависимости от формата отладочной печати довольно хрупкий, я думаю, что лучше просто владеть им более прямо. Я нашел следующее довольно полезным:

extension Data { 
    func hex(separator:String = "") -> String { 
     return (self.map { String(format: "%02X", $0) }).joined(separator: separator) 
    } 
} 

Это позволяет мне заменить простую print(newData) с чем-то вроде

print(newData.hex()) 

или

print(newData.hex(separator:".")) 

если мои глаза нуждаются в помощи разбора байт

В стороне, я делаю совсем немного материала BLE m и разработали ряд других полезных расширений данных для материалов BLE

+0

Так звучит как 'self.peripheral? .writeValue (newData, для: positionCharacteristic, type: CBCharacteristicWriteType.withResponse)' должен работать тогда. Я не уверен, почему я ничего не вижу в своем терминале. У меня есть данные, идущие в другую сторону. – lusher00

+1

Тело вашей функции можно заменить на 'return self.map {String (формат:«% 02x », $ 0)} .joined (разделитель: разделитель)' – vadian

+0

Не уверен, что я понимаю отказ @ lusher00. Похоже, что ваш вопрос больше, чем «почему он не показывает мне сами байты, а не количество байтов?» Что еще вы ожидаете увидеть где? На каком терминале вы ссылаетесь? –

Смежные вопросы