char*(char[]) C语言标准字符数组Cstring(char 单字节变量类型,最多表示256个字符)
wchar_t* (wchar[]) (wchar宽字节变量类型,用于表示Unicode字符,宽字节类型每个变量占用2个字节)
NSString Object-C标准字符串对象
NSDATA 二进制数据流、不变缓冲区,使用文件时,需要频繁地将数据读入一个临时存储区,它通常成为缓冲区NSData类提供了一种简单的方式,它用来设置缓冲区、将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。
char*转NSString
char *abc = "what a fuck day";//使用数组,使用指针浪费4个字节 NSString * str_utf = [[NSString alloc] initWithBytes:abc length:strlen(abc) encoding:NSUTF8StringEncoding];//nsstring length不用算上/0 NSLog(@"%@",str_utf);
NSString 转 char*
NSString *nss = [[NSString alloc]initWithFormat:@"nsstringtochar*"]; char *cc = (char *) [nss UTF8String]; NSLog(@"%s",cc);
//L代表按宽字符保存
//注意紧接在第一个引号前面的大写字母L(代表「long」)。这将告诉编译器该字串按宽字符保存——即每个字符占用2个字节。下面的“你好”,指针变量p要占用4个字节,而字串变量需要6个字节-每个字符需要2个字节,末尾的0还需要2个字节。
setlocale(LC_CTYPE,"zh_CN.UTF-8");
char cstr[100];
const wchar_t* pTem = L"你好";
//将wcstring(wchar_t[])转为cstring(char[])
wcstombs(cstr, pTem, 100);//wcstombs_s(wcstomb的新版本函数,可以涵盖setlocale的功能)
//可以打印
//printf("%s",cstr);
//中文乱码(非中文可以):nslog中的%s只支持ascII
//NSLog(@"%s",cstr);
//在mac中cstring输出只能转为NSstring
NSString *s = [NSString stringWithCString:cstr encoding:NSUTF8StringEncoding];
NSLog(@"%@",s);
char转wchar(此题下面实现借助iconv库则使用NSSTRING作为中间转换层进行转换)
setlocale(LC_CTYPE,"zh_CN.UTF-8");//nsstring打印此句要放在此处 const char cstr[100] = "你好"; wchar_t wstr[100]; mbstowcs(wstr, cstr, 100); //setlocale(LC_CTYPE,"zh_CN.UTF-8");//用wprintf此句要放在此处 //可以打印(中文正常) //wprintf(L"%S",wstr); //编译成功但是只显示一个字 //NSLog(@"%S",wstr); //wchar_t在mac intel下就是UTF-32LE NSString *s2 = [[NSString alloc]initWithBytes:wstr length:sizeof(wchar_t) *(wcslen(wstr)+1)encoding:NSUTF32LittleEndianStringEncoding]; NSLog(@"%@",s2);//可以打印
wchar_t wchar[] = L"汉字hello123" //用wslen不用sizeof则中英文混编不行 NSString *str = [[NSString alloc] initWithBytes:wchar length: sizeof(wchar) encoding:NSUTF32LittleEndianStringEncoding]; NSLog(@"%@",str);
指针形式(注意length取值的区别)
wchar_t *wchar = L"汉字hello123"; NSString *str = [[NSString alloc] initWithBytes:wchar length: sizeof(wchar_t) * (wcslen(wchar)+1) encoding:NSUTF32LittleEndianStringEncoding];NSLog(@"%@",str);
nsstring转wchar_t
NSString *string = @"中国123tcy"; wchar_t *str = (wchar_t *)[string cStringUsingEncoding:NSUTF32StringEncoding]; wprintf(L"%ls",str);
//NSString转NSData NSString* str= @"胡效率尅ßteststring123"; NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding]; //NSData转NSString NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",strData);