你問爲什麼這不起作用:
NSString *deviceString = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];
這是因爲initWithData
假定NSData
包含UTF8字符串。但在你的情況下,deviceToken
不是UTF8字符串;它是二進制數據。
你的問題的其餘部分假定您將創建<72c7f0 e943d3 36713b 827e23 4337e3 91ad 2eecc4>
字符串(大概是你與stringWithFormat
或description
方法創建),和你問如何修剪<
,>
,並刪除空格。 (我認爲其他人已經回答了這個問題。)
雖然我可能會提出一種不同的方法。你可以簡單地有一個程序直接創建十六進制字符串,像這樣:
NSString *deviceString = [self hexadecimalStringForData:deviceToken];
然後,您可以有一個像hexadecimalStringForData
方法,以便:
- (NSString *)hexadecimalStringForData:(NSData *)data
{
NSMutableString *hexadecimalString = [[NSMutableString alloc] initWithCapacity:[data length] * 2];
uint8_t byte;
for (NSInteger i = 0; i < [data length]; i++)
{
[data getBytes:&byte range:NSMakeRange(i, 1)];
[hexadecimalString appendFormat:@"%02x", byte];
}
return hexadecimalString;
}
您當然可以使用description
/stringWithFormat
方法和然後像其他人所建議的那樣清理那個字符串,但上述內容讓我覺得這是一個更直接的解決方案。
來源
2014-01-13 07:19:15
Rob
只要在這裏看看靈魂:http://stackoverflow.com/questions/1587407/iphone-device-token-nsdata-or-nsstring。 在發佈一個新問題之前,請至少嘗試幾分鐘。 –
比你,因爲我的英文很差,所以..我下次會小心 –