NSData中的NSString,字符为fl;
如何从包含以下字符的NSString的字节日期返回NSString:flNSData中的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 *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都有一个方法。