1. 程式人生 > 實用技巧 >Objective C 各種資料型別轉換筆記大全

Objective C 各種資料型別轉換筆記大全

這個筆記,是為了讓自己想不起的時候隨時可以回顧一下,我不會說是因為自己懶不想記的 ·。·

以後會一直新增工作學習期間遇見的型別轉換在這裡~~

歡迎收錄查閱~~~

ASCII碼互轉NSString

ASCII碼錶

//1.ASCII碼轉NSString
unichar ch =65;
NSString *str =[NSString stringWithUTF8String:(char *)&ch];
//-->A

// ASCII to NSString

int asciiCode = 65;
NSString *string = [NSString stringWithFormat:@"%c", asciiCode]; // A
//-->A


//2.NSString轉ASCII碼
NSString *string = @"]";
int asciiCode = [string characterAtIndex:0];
//-->93

NSString 互轉 char*

//NSString轉char
//方法一
NSString *t = @"字串";
const char *t2 =[t UTF8String];

//方法二
NSString * cocoaString = @"My NSString";
const char * myCstring = [cocoaString cStringUsingEncoding:NSUTF8StringEncoding];

//方法三
NSString *t = @"字串1";
char mychar[100];
strcpy(mychar,(char *)[t UTF8String]);

//Char轉NSString
//方法一
NSString * cocoaString = [[NSString alloc] initWithCString:mychar encoding:NSUTF8StringEncoding];

//方法二
const char * cString = "Hello";
NSString *TempString =[NSString stringWithFormat:@"%s",cString];

//方法三
const char * cString = "Hello";
NSString *str=[NSString stringWithCString:cString encoding:NSUTF8StringEncoding];

NSData 互轉 char*

//Char*轉NSData
//方法一
char * postData = "TEST";
NSData *data = [NSData dataWithBytes:postData length:strlen(postData)];
//方法二 先轉NSString再轉data

//NSData轉Char*
[data bytes];

NSString 互轉 NSData

//NSString轉NSData
NSData *data =[str dataUsingEncoding:NSUTF8StringEncoding];

//NSData轉NSString
NSString * str  =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSDictionary互轉NSData

//dic轉data
NSData *datax= [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:nil];
//data轉dic
NSDictionary *dictionary =[NSJSONSerialization JSONObjectWithData:datax options:NSJSONReadingMutableLeaves error:nil];

十六進位制轉十進位制

//    十六進位制格式字串(帶不帶0x都可)轉成數字
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x83"];
[scanner scanHexInt:&outVal];
NSLog(@"%d", outVal);
//-->131

十六進位制轉NSString

NSString * str = @"68656C6C6F";
NSMutableString * newString = [[NSMutableString alloc] init] ;
int i = 0;
while (i < [str length])
{
    NSString * hexChar = [str substringWithRange: NSMakeRange(i, 2)];
    int value = 0;
    sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
    [newString appendFormat:@"%c", (char)value];
    i+=2;
}
NSLog(@"new str :%@",newString); 
//-->new str :hello

NSString互轉NSNumber

//NSString轉NSNumber
//方法一
NSString * str = @"890909";
// 字串轉為NSInteger型別
NSInteger num = [str integerValue];
// 字串轉為NSNumber物件型別
NSNumber * nums = @(num);
//方法二,簡化寫法
NSNumber * nums = @([str integerValue]);

//NSNumber轉NSString
NSNumberFormatter *number = [[NSNumberFormatter alloc] init];
NSString *b = [number stringFromNumber:nums];

Objective C Char *,Const Char *,Cstring,CFString互轉

Mark:之前的筆記,現在挪到這邊。

-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\n", 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\n", buffer);
          }

第二種:利用前面的關係將CFstring轉成NSString再轉成char

NSString *testNS = (__bridge NSString *)bCFString;
char *testC =(char *) [testNS UTF8String];
NSLog(@"-->%s",testC);

[Objective C 十六進位制 十進位制互轉]

Mark:之前的筆記,現在挪到這邊。

十六進位制轉十進位制:

NSString *hexStr = @"0xff";
UInt64 mac1 =  strtoul([hexStr UTF8String], 0, 16);
NSLog(@"%llu",mac1);
NSLog(@"十六進位制轉十進位制 --->%lu",strtoul(hexStr.UTF8String, 0, 16));

如果有溢位的話,使用scanner:

NSString *hexStr1 = @"0x00000000027743330000000000714C9C";
unsigned long long result = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexStr1];
[scanner scanHexLongLong:&result];
NSLog(@"%llu",result);

十六進位制轉NSString

 NSString * str = @"68656C6C6F";
    NSMutableString * newString = [[NSMutableString alloc] init] ;
    int i = 0;
    while (i < [str length])
    {
        NSString * hexChar = [str substringWithRange: NSMakeRange(i, 2)];
        int value = 0;
        sscanf([hexChar cStringUsingEncoding:NSASCIIStringEncoding], "%x", &value);
        [newString appendFormat:@"%c", (char)value];
        i+=2;
    }
    NSLog(@"new str :%@",newString); 
//-->new str :hello

十進位制轉十六進位制:

NSLog(@"十進位制轉十六進位制 --->%@",[NSString stringWithFormat:@"%x",255]);

或者:

+(NSString *)ToHex:(long long int)tmpid
{
    NSString *nLetterValue;
    NSString *str =@"";
    long long int ttmpig;
    for (int i = 0; i<9; i++) {
        ttmpig=tmpid%16;
        tmpid=tmpid/16;
        switch (ttmpig)
        {
            case 10:
                nLetterValue =@"A";break;
            case 11:
                nLetterValue =@"B";break;
            case 12:
                nLetterValue =@"C";break;
            case 13:
                nLetterValue =@"D";break;
            case 14:
                nLetterValue =@"E";break;
            case 15:
                nLetterValue =@"F";break;
            default:nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];
                
        }
        str = [nLetterValue stringByAppendingString:str];
        if (tmpid == 0) {
            break;
        }     
    }
    return str;
}