Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46537
  • 博文数量: 40
  • 博客积分: 825
  • 博客等级: 准尉
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-01 10:46
文章分类

全部博文(40)

文章存档

2013年(2)

2012年(15)

2011年(23)

我的朋友

分类: C/C++

2012-03-06 17:56:46

当将一个NSString向NSData转换的时候,会根据转换的时候使用的编码方式的不同而产生一些意想不到的结果,如下面一段代码:
  1. NSString *passWord = @"password";
  2.     unsigned char *tmp_8 = (unsigned char *)[passWord cStringUsingEncoding:NSUTF8StringEncoding];
  3.     NSData *tmpData_8 = [passWord dataUsingEncoding:NSUTF8StringEncoding];
  4.     unsigned char *tmp_16 = (unsigned char *)[passWord cStringUsingEncoding:NSUTF16StringEncoding];
  5.     NSData * tmp_16 = [passWord dataUsingEncoding:NSUTF16StringEncoding];

运行上面一段代码可以发现,在使用NSUTF8StringEncoding进行转换的时候,tmp_8tmpData_8在内存的数据是一样的,都是8byte,而在使用NSUTF16StringEncoding进行编码的时候,tmp_16tmp_16分别是1618个字节,原因是在使用后面的一种方式进行转换的时候,默认的是在前面加上了两个字节:0xfffe,而这两个字节所代表的意思应该比较明显了,就是表示后面的数据是UTF-16方式的小段储存。

当然,在使用其他的编码的时候也会根据不同的编码方式有不同的结果。



阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~