2016-08-04 5 views
0

У меня есть NSData:Swift конвертировать NSData в строку

print("DEVICE TOKEN = \(deviceToken)") 

, содержащий следующее:

DEVICE TOKEN = <19bd2388 88adb725 996437e3 cac6b7a5 7ba9157d 71bb5c00 ebee575f 255eca47> 

, когда я пытаюсь преобразовать его с помощью

String(data: deviceToken, encoding: NSUTF8StringEncoding) 

мой Строка nil .... но когда я использую следующее:

String(data: deviceToken, encoding: NSASCIIStringEncoding) 

я получаю это:

"\u{19}½#­·%d7ãÊÆ·¥{©\u{15}}q»\\\0ëîW_%^ÊG" 

Как я могу получить реальную стоимость NSData?

+0

Если вы пытаетесь получить шестнадцатеричный String, вы можете просто преобразовать его в String и затем удалить все не-шестнадцатеричные символы, заменив Regex '' [<>] "' на '" "... ... Например, попробуйте NSRegularExpression (pattern:" [<>] ", опции: NSRegularExpressionOptions()). stringByReplacingMatchesInString (String (токен), параметры: NSMatchingOptions(), диапазон: NSMakeRange (0, String (токен) .utf16.count), withTemplate: "") ' – Jojodmo

ответ

0

Содержание deviceToken является только ряд байтов. Он не представляет собой макет байта строки в любой кодировке. Как вы конвертируете его в строку, зависит от вас.

Вы можете сцепить шестнадцатеричные значения вместе:

let str1 = deviceToken.description 
      .stringByReplacingOccurrencesOfString(" ", withString: "") 
      .stringByReplacingOccurrencesOfString("<", withString: "") 
      .stringByReplacingOccurrencesOfString(">", withString: "") 
// Result: 19bd238888adb725996437e3cac6b7a57ba9157d71bb5c00ebee575f255eca47 

Или использовать кодировку Base64 (который я предпочитаю, потому что она может быть легко преобразован обратно в NSData)

let str2 = deviceToken.base64EncodedStringWithOptions([]) 
// Result: Gb0jiIittyWZZDfjysa3pXupFX1xu1wA6+5XXyVeykc= 
-2

Пожалуйста, попробуйте этот код, я надеюсь, что это будет полезно

Swift

let deviceTokenString = deviceToken.description.stringByReplacingOccurrencesOfString("<", withString: "").stringByReplacingOccurrencesOfString(">", withString: "").stringByReplacingOccurrencesOfString(" ", withString: "") 

print(deviceTokenString) 

ObjC

NSString * deviceTokenString = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]; 
Смежные вопросы