NSData для NSString в ObjectiveC - PullRequest
2 голосов
/ 02 июня 2011

Я преобразовываю маркер устройства APN, который находится в формате NSData, в NSString, но я являюсь некоторыми специальными символами,

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSLog(@"Device Token 111 : %@", deviceToken);

    NSString *deviceStr = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding];
    NSLog(@"Device Token : %@", deviceStr);
    [deviceStr release];
}

Device Token 111 : <d8b62879 48de8f9f 90507519 da1d39cf 1b700f7f 022dcaf4 7532a8b7 a6f9afe4>
Device Token : ض(yHÞPuÚ9Ïep-Êôu2¨·¦ù¯ä

Я даже пытался с NSASCIIStringEncoding.Что я делаю неправильно ?

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Попробуйте использовать следующий метод с [deviceToken bytes] в качестве первого параметра.

const static char hexchar[] = "0123456789ABCDEF";
- (NSString*) bytes2hex:(const char* ) buffer length:(int)buf_len {
    size_t i;
    char *p;
    int len = (buf_len * 2) + 1;
    p = malloc(len);
    for (i = 0; i < buf_len; i++) {
        p[i * 2] = hexchar[(unsigned char)buffer[i] >> 4 & 0xf];
        p[i * 2 + 1] = hexchar[((unsigned char)buffer[i] ) & 0xf];
    }
    p[i * 2] = '\0';
    NSString * result = [NSString stringWithCString:p encoding:NSUTF8StringEncoding];
    free(p); 
    return result; 
}
1 голос
/ 26 марта 2013

Вы можете использовать метод description для получения строкового представления токена

NSLog(@"Token: [%@]", [devToken description]);

Чтобы удалить нечисловые символы, вы можете сделать:

NSCharacterSet *set = [[NSCharacterSet alphanumericCharacterSet] invertedSet];    
NSString *tkn = [[[devToken description] componentsSeparatedByCharactersInSet:set] componentsJoinedByString: @""];
...