Objective C 各種資料型別轉換筆記大全
阿新 • • 發佈:2020-12-08
這個筆記,是為了讓自己想不起的時候隨時可以回顧一下,我不會說是因為自己懶不想記的 ·。·
以後會一直新增工作學習期間遇見的型別轉換在這裡~~
歡迎收錄查閱~~~
ASCII碼互轉NSString
//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;
}