¿Por qué el siguiente código produce el registro en la parte inferior? Aquí es el anomaly- mi segundo NSLog debe imprimir la chrStr pero produce nada, vacío, que se verifica por este comando de depuración:¿Por qué este NSString creado a partir de un objeto NSData no puede mostrar que tiene contenido?
(BGF) po chrStr
objeto devuelve Descripción vacío
Sin embargo, el tercer NSString donde vuelvo a convertir NSString en NSData OBJETO muestra los datos, el mismo valor que en el primer NSLog, como debería. Esto me indicaría que chrStr debe tener contenido real. Pero parece no ser así desde el NSLOG o el comando po. Por qué ?
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
Produce: [1071: 207] 1.NSData: 004c6f67 696e6e61 6d650050 61737377 6f7264
[1071: 207] 2.NSString:
[1071: 207] 3.NSDATA: 004c6f67 696e6e61 6d650050 61737377 6f7264
Esto es un verdadero misterio para mí. Si chrStr está vacío, 3-NSDATA no pudo mostrar su información, ¡pero lo hace!
¿Qué estoy tratando de lograr? Bueno, consulte mi primera línea de comentarios: // propósito:
Esa línea cuando está descomentada produce una advertencia, aunque realmente funciona, así que estaba tratando de hacerlo de otra manera que me permitió tener una compilación limpia. Si ves una mejor manera de lograr ese objetivo, yo todos los ojos y oídos. Pero, por favor, no se fije en por qué esa cadena @ "\ 000% @ \ 000% @" es necesaria, empiece aceptando que sí lo es. Gracias.