zoukankan      html  css  js  c++  java
  • Objective C Char *,Const Char *,Cstring,CFString互转

    一直傻傻分不清楚Char,Const Char,Cstring,CFString之间的转换关系,每次都要看之前写的东西才能想起来。

    好记性不如烂笔头,决定把之前零散的东西再写出来汇整一起,下次不用再苦苦的翻东西找转换方式了。

    -1. NSString转cstring

    NSString *string1 = @"i am NSString";
    NSLog(@"To cString : %s",[string1 UTF8String]);
    

    -2. Const Char,Char转NSString

    const char *cString = "i am const CString";
    char *cString2 = "I am char";
    NSLog(@"TO NSString1: %@",[NSString stringWithUTF8String:cString]);
    NSLog(@"TO NSString2: %@",[NSString stringWithUTF8String:cString2]);
    

    -3. Const Char 转Char

    char* 表示一个指针变量,并且这个变量是可以被改变的。

    const char*表示一个限定不会被改变的指针变量(意思是指针指向的内容不可变,但指针本身可以再赋值)

    
    //方法一 strdup
    //strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间
    const char *cString = "i am const CString";
    char *string2 = strdup(cString);
    NSLog(@"To char1: %s",string2);
    free(string2);
    NSLog(@"To char2: %s",string2);
    
    //方法二:强转const char
    char *string3 = (char *)cString;
    NSLog(@"To char3: %s",string3);
            
    

    -4. Char 转Const Char

    //强转
    char *string4 = "I am Char";
    const char *cString  = string4;
    NSLog(@"To const char:%s",cString);
    

    -5. NSString 互转CFString

    NSString *aNSString = @"NSString";
    CFStringRef aCFString = (__bridge CFStringRef)aNSString;
    NSString *bNSString = (__bridge NSString *)aCFString;
    NSLog(@"the CFString : %@",aCFString);
    NSLog(@"the NSString : %@",bNSString);
    

    -6. Char 转CFString

    char *cStringA = "cStringA";
    CFStringRef bCFString =CFStringCreateWithCString(NULL, cStringA, kCFStringEncodingUTF8);
    NSLog(@"the cfString : %@",bCFString);
    

    -7. CFString转Char

    第一种:利用CF 内置方法拿到String

    //方法一 通过ssize_t
            ssize_t s = CFStringGetMaximumSizeForEncoding(CFStringGetLength(bCFString), kCFStringEncodingUTF8);
            char *d = malloc(s);
            if(d) {
                CFStringGetCString(bCFString, d, s, kCFStringEncodingUTF8);
                printf("%s
    ", d);
                free(d);
            }
    //方法二 通过CFIndex
    CFIndex length = CFStringGetLength(bCFString);
              CFIndex maxSize = CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) + 1;
              char *buffer = (char *)malloc(maxSize);
              if (CFStringGetCString(bCFString, buffer, maxSize,
                                     kCFStringEncodingUTF8)) {
                  printf("%s
    ", buffer);
              }
    

    第二种:利用前面的关系将CFstring转成NSString再转成char

    NSString *testNS = (__bridge NSString *)bCFString;
    char *testC =(char *) [testNS UTF8String];
    NSLog(@"-->%s",testC);
    
  • 相关阅读:
    ERROR: Cannot set priority of registrydns process 33740
    Hbase和Phoenix部署-单机版
    ambari安装hdp时,新建的ambari-hdp-1.repo中baseurl无值
    centos7.2升级openssh到8.0
    kafka一个broker挂掉无法写入
    对cdh搭建过程错误总结及解决方法
    streamsets
    [Spark]Task not serializable
    [Kafka]How to Clean Topic data
    Postgresql Master/Slaver
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12516958.html
Copyright © 2011-2022 走看看