#objective-c #base64 #byte
#objective-c #base64 #байт
Вопрос:
NSString* data = @"UdmAjkmNQs79 J/a/MVVSACRkIo=";
NSData *key = [NSData dataFromBase64String:data];
const char *keyBytes = [key bytes];
NSLog(@"Length: %lu", strlen(keyBytes));
Рассмотрим приведенный выше код. У меня есть строка base64, которая содержит 20 байт данных. Я превращаю это в байты, и мне нравится проверять количество байт. Выводится 16. Почему выводится 16 и что мне нужно сделать, чтобы получить правильное количество байт (20)?
Ответ №1:
используйте приведенный ниже код, чтобы получить длину байта данных:
NSString* data = @"UdmAjkmNQs79 J/a/MVVSACRkIo=";
NSData *key = [[NSData alloc] initWithBase64EncodedString:data options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSLog(@"Length: %lu", [key length]);
Комментарии:
1. Спасибо. Также выяснил причину, по которой это не всегда работает со strlen (), но иногда срабатывает. Мой пример строки в шестнадцатеричном формате — 51D9808E498D42CEFDF89FDAFCC555480091908A. и что 00 в конце — это нулевой ограничитель, поэтому он видел только первые 16 байтов (или фактически символы) с помощью strlen ()
2. да, в некоторых случаях это работает, поэтому будьте осторожны при использовании
strlen()
с байтами или тестом, я предлагаю использоватьlength
функциюNSData
для достижения наилучшего результата.