当将一个NSString向NSData转换的时候,会根据转换的时候使用的编码方式的不同而产生一些意想不到的结果,如下面一段代码:
- NSString *passWord = @"password";
-
unsigned char *tmp_8 = (unsigned char *)[passWord cStringUsingEncoding:NSUTF8StringEncoding];
-
NSData *tmpData_8 = [passWord dataUsingEncoding:NSUTF8StringEncoding];
-
unsigned char *tmp_16 = (unsigned char *)[passWord cStringUsingEncoding:NSUTF16StringEncoding];
-
NSData * tmp_16 = [passWord dataUsingEncoding:NSUTF16StringEncoding];
运行上面一段代码可以发现,在使用NSUTF8StringEncoding进行转换的时候,tmp_8和tmpData_8在内存的数据是一样的,都是8个byte,而在使用NSUTF16StringEncoding进行编码的时候,tmp_16和tmp_16分别是16和18个字节,原因是在使用后面的一种方式进行转换的时候,默认的是在前面加上了两个字节:0xfffe,而这两个字节所代表的意思应该比较明显了,就是表示后面的数据是UTF-16方式的小段储存。
当然,在使用其他的编码的时候也会根据不同的编码方式有不同的结果。
阅读(1242) | 评论(0) | 转发(0) |