NSData中的NSString,字符为fl;

NSData中的NSString,字符为fl;,string,encoding,nsstring,byte,nsdata,String,Encoding,Nsstring,Byte,Nsdata,如何从包含以下字符的NSString的字节日期返回NSString:fl NSString *inflatedString01 = @"fl"; // original code that was the problem! NSData *dataOfString = [NSData dataWithBytes:[inflatedString01 UTF8String] length:[inflatedString length]]; // code that fixes the proble

如何从包含以下字符的NSString的字节日期返回NSString:fl

NSString *inflatedString01  = @"fl";

// original code that was the problem!
NSData *dataOfString = [NSData dataWithBytes:[inflatedString01 UTF8String] length:[inflatedString length]];
// code that fixes the problem
//NSData *dataOfString = [inflatedString01 dataUsingEncoding:NSUTF8StringEncoding]; //thanks zneak

NSLog(@"%@",inflatedString01);
NSLog(@"%i",[inflatedString01 length]);
NSLog(@"%@",dataOfString);
NSLog(@"%i",[dataOfString length]);

NSString *stringFromData = [NSString stringWithCString:[dataOfString bytes] encoding:NSUTF8StringEncoding]

NSLog(@"%@",stringFromData);
上述结果的输出给出:

2012-01-02 08:47:48.963 TestApp[74363:fe03] fl
2012-01-02 08:47:49.262 TestApp[74363:fe03] 1
2012-01-02 08:47:49.540 TestApp[74363:fe03] <ef>
2012-01-02 08:47:49.924 TestApp[74363:fe03] 1
2012-01-02 08:47:50.787 TestApp[74363:fe03] (null)
2012-01-02 08:47:48.963测试pp[74363:fe03]fl
2012-01-02 08:47:49.262测试pp[74363:fe03]1
2012-01-02 08:47:49.540测试pp[74363:fe03]
2012-01-02 08:47:49.924测试pp[74363:fe03]1
2012-01-02 08:47:50.787 TestApp[74363:fe03](空)

我希望看到最后一个NSLog输出的fl而不是(null)。我猜NSData的“ef”输出有一定的意义。

问题在于字符大小与二进制大小的差异。调用
[NSString length]
时,得到的是字符串中的逻辑字符数,而不是以任意编码存储字符串所需的字节数。字符FL是
NSString
类的一个逻辑字符,但其UTF-8编码为
ef ac 82
:它占用3个字节

调用
[NSData dataWithBytes:length://code>会收到一个指向这3个字节的指针,但
[inflatedString01 length]
会告诉您这只是一个字符,并将其作为字节数传递;这就是为什么您的数据只包含
ef

strlen
,不知道编码,只计算C字符串中的字节数,直到找到零为止,因此它将准确返回UTF-8字符串中的字节数(如您在注释中所述)


最好的解决方案可能是简单地调用
[inflatedString01 dataUsingEncoding:NSUTF8StringEncoding]
来获取字节。

实际上,我想我得到了它,我尝试了:NSData*dataOfString=[NSData dataWithBytes:[inflatedString01 UTF8String]length:strlen([inflatedString01 UTF8String]);它得到了字符串字节数据的正确长度(我想!)谢谢解释“ZNEAK,我将在5分钟内接受:-”Rew,没问题:)也考虑使用<代码> -[NString DATAUGIN编码:] /代码>来获得字节。当然,将为其他人更新问题,它是因为我尝试任何事物和一切而得到的。(知道你在做什么总是有帮助的:-)我猜你的意思是+[nsstringwithcstring:encoding:];无论如何,谢谢你的帮助@无论如何,Mac OS和iOS都有一个方法。