打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS 获取字符串中的单个字符

iOS 获取字符串中的单个字符

要取到单个字符,就要知道字符串的编码方式,这样才能够定位每个字符在内存中的位置。但是,iOS的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可以根据编码规则取到单个字符了。在这里,使用UTF-8编码。UTF-8编码的使用范围比较广泛,客户端与服务器之间传输的数据大多以UTF-8编码。

关于UTF-8的详细说明可以Wiki下:UTF-8

下图是UTF-8编码的格式:

开发的流程大概是:

  1. 将NSString字符串转成UTF-8格式的char串。
  2. 从头依次读取char串中的字节。
  3. 根据上图中的'Byte 1'字段,判断当前字符占几个字节,并获取这几个字节。
  4. 将获取的几个字节转成NSString字符串对象。
  5. 获取下一个字符,进行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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Go语言字符串
IOS开发判断在字符串中是否包含相应的字符
C 库函数 – strcspn() | 菜鸟教程
c语言 去掉字符串最后一位字符
C++ 笔试 基础之 07 将字符串的前N个字符平移到字符串的后面
Java、JS、OC、Flutter的Base64编码和解码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服