NSString、char*,NSData,wchar

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);


wchar转char(需要重写)----借助了iconv库(此题下面实现借助iconv库则使用NSSTRING作为中间转换层进行转换)

    //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转NSString

    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);



你可能感兴趣的:(NSString、char*,NSData,wchar)