为什么以下代码会产生底部的日志记录?
这里有一个反常现象 - 我的第二个NSLog应该打印chrStr,但是什么也没有输出,空白,这通过以下调试命令得到了验证:
(gdb) po chrStr 对象返回空描述
然而,我重新将NSString转换回NSData对象的第三个NSString确实显示了数据,与第一个NSLog中的值相同,正如它应该的那样。这表明chrStr必须具有实际内容。但似乎从NSLOG或po命令中并非如此。为什么?
(gdb) po chrStr 对象返回空描述
然而,我重新将NSString转换回NSData对象的第三个NSString确实显示了数据,与第一个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无法显示其信息,但它确实可以显示!
我想要达到什么目的?请检查我的第一条注释行:// purpose:
即使它实际上可以工作,但是当取消注释时,该行会产生警告,因此我试图以另一种方式完成它,以便我可以进行干净的编译。如果您看到更好的实现目标的方法,请告诉我。但是请不要纠结于为什么那个@"\000%@\000%@"字符串是必要的,开始接受它的存在。谢谢。