【发布时间】:2011-08-19 15:01:42
【问题描述】:
为什么下面的代码会在底部生成日志? 这是异常情况——我的第二个 NSLog 应该打印 chrStr 但什么也没有产生,空的,这是由这个调试命令验证的:
(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 无法显示其信息,但可以!
我想要完成什么?好吧,检查我的第一条评论://目的:
未注释的那一行会产生一个警告,即使它确实有效,所以我试图用另一种方式来做它,让我有一个干净的编译。如果您看到实现该目标的更好方法,我会全力以赴。但是请不要纠缠于为什么@"\000%@\000%@" 字符串是必要的,开始接受它。谢谢。
【问题讨论】:
标签: objective-c ios nsstring nsdata