iOS 获取字符串中的单个字符
来源:互联网 发布:如何关闭蜂窝移动数据 编辑:程序博客网 时间:2024/04/29 18:43
iOS 获取字符串中的单个字符
要取到单个字符,就要知道字符串的编码方式,这样才能够定位每个字符在内存中的位置。但是,iOS的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可以根据编码规则取到单个字符了。在这里,使用UTF-8编码。UTF-8编码的使用范围比较广泛,客户端与服务器之间传输的数据大多以UTF-8编码。
关于UTF-8的详细说明可以Wiki下:UTF-8。
下图是UTF-8编码的格式:
开发的流程大概是:
- 将NSString字符串转成UTF-8格式的char串。
- 从头依次读取char串中的字节。
- 根据上图中的'Byte 1'字段,判断当前字符占几个字节,并获取这几个字节。
- 将获取的几个字节转成NSString字符串对象。
- 获取下一个字符,进行3,只到获取最后的字符。
**有一点要注意:
<!-- lang: cpp -->NSString *string = [NSString stringWithFormat:@"1a张"];const char *chars = [string cStringUsingEncoding:NSUTF8StringEncoding];for (int i = 0; i < strlen(chars); i++) { printf("%x", chars[i]);}
输出:3161ffffffe5ffffffbcffffffa0
在iOS中,非ASCII字符的前面都会加上ffffff,而不是直接使用UTF-8中规定的起始值。
下面是代码实现(使用类别):
NSString+StringToWords.h
<!-- lang: cpp -->#import <Foundation/Foundation.h>@interface NSString (StringToWords)- (NSArray *)words;@end
NSString+StringToWords.h
<!-- lang: cpp --> #import "NSString+StringToWords.h"@implementation NSString (StringToWords)- (NSArray *)words{#if ! __has_feature(objc_arc) NSMutableArray *words = [[[NSMutableArray alloc] init] autorelease];#else NSMutableArray *words = [[NSMutableArray alloc] init];#endif const char *str = [self cStringUsingEncoding:NSUTF8StringEncoding]; char *word; for (int i = 0; i < strlen(str);) { int len = 0; if (str[i] >= 0xFFFFFFFC) { len = 6; } else if (str[i] >= 0xFFFFFFF8) { len = 5; } else if (str[i] >= 0xFFFFFFF0) { len = 4; } else if (str[i] >= 0xFFFFFFE0) { len = 3; } else if (str[i] >= 0xFFFFFFC0) { len = 2; } else if (str[i] >= 0x00) { len = 1; } word = malloc(sizeof(char) * (len + 1)); for (int j = 0; j < len; j++) { word[j] = str[j + i]; } word[len] = '\0'; i = i + len; NSString *oneWord = [NSString stringWithCString:word encoding:NSUTF8StringEncoding]; free(word); [words addObject:oneWord]; } return words;}@end
0 0
- iOS 获取字符串中的单个字符
- Java--将字符串中的多个空格换成单个字符
- iOS 获取字符串的首、尾字符
- iOS开发之获取一段字符串中的中文字和中文字符
- 可以这样获取字符串中的某个字符
- 获取String字符串中的某一段字符!
- 获取某个字符在字符串中的位置
- 获取字符在字符串中的位置
- 获取字符串中的中文字符长度
- Delphi中string数据类型的特殊用法(获取string字符串的单个字符)
- ios除去可变字符串中的某些字符
- iOS中判断字符串中的字符
- iOS 过滤json字符串中的特殊字符
- iOS 去除字符串中的特殊字符
- IOS从字符串中获取指定字符之间的字符串
- 字符串中单个字符的用法
- C/C++ 单个字符与字符串
- 查找字符串中单个字符个数
- android LayoutInflater加载的布局大小不受控制
- LightOj 1370欧拉函数快速筛法
- Activity启动流程
- Apache Http Sever的安装与使用
- SQL多表连接查询
- iOS 获取字符串中的单个字符
- HTML5 和 HTML4的区别
- jee、spring、spring mvc、mybatis 学习(七)
- 使用 ViewPager + GridView 导致页面卡顿
- Java 类的实例化顺序
- centos系统初始化脚本
- LaTeX技巧630:用LaTeX寫algorithm
- 136. Single Number
- Ubuntu下配置java开发环境