Почему следующий код производит запись в нижней части?
Вот аномалия - мой второй NSLog должен напечатать chrStr, но ничего не выдает, пустой, что проверяется этой командой отладки:
(gdb) po chrStr
объект возвращает пустое описание
Однако третья строка NSString, в которой я повторно преобразовываю строку NSString обратно в объект NSData, отображает данные, то же значение, что и в первом NSLog, как и должно быть. Это указало бы на то, что chrStr должен иметь фактическое содержимое. Но, похоже, это не так из NSLOG или команды po. Почему?
NSString *login;
NSString *pass;
// Purpose: NSString *loginString = [NSString stringWithFormat:@"\000%@\000%@", login, pass];
login = @"Loginname"; // text string1
pass = @"Password"; // text string2
// convert text strings to data objects
NSData *subData1 = [login dataUsingEncoding:NSUTF8StringEncoding];
NSData *subData2 = [pass dataUsingEncoding:NSUTF8StringEncoding];
// embed a NULL into new NSData object
NSMutableData *data = [NSMutableData data];
unsigned char zeroByte = 0;
[data appendBytes:&zeroByte length:1];
// append string1, NULL, string2 to data object
[data appendData:subData1];
[data appendBytes:&zeroByte length:1];
[data appendData:subData2];
NSLog(@"1.NSData: %@", data); // print data object
// create a character string from data object
NSString *chrStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"2.NSString: %@", chrStr); // print character string
// create data object from string object
NSData *chrData = [chrStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"3.NSDATA: %@", chrData); // print data object
Производит:
[1071: 207] 1.NSData: 004c6f67 696e6e61 6d650050 61737377 6f7264
[1071: 207] 2.NSString:
[1071: 207] 3.NSDATA: 004c6f67 696e6e61 6d650050 61737377 6f7264
Это настоящая загадка для меня. Если chrStr пуст, то 3-NSDATA не может отобразить свою информацию, но это так!
Чего я пытаюсь достичь? Хорошо, проверьте мою самую первую строку комментария: // цель:
Эта строка, когда она не закомментирована, выдает предупреждение, даже если оно действительно работает, поэтому я пытался сделать это другим способом, который позволил бы мне получить чистую компиляцию. Если вы видите лучший способ для достижения этой цели, я все глаза и уши. Но, пожалуйста, не зацикливайтесь на том, почему эта строка @ "\ 000% @ \ 000% @" необходима, начните с того, что принимаете ее. Спасибо.