1.
char cStrArr[4] = {'1','2','3','4'};
NSString *StrArr = [[NSString alloc]initWithCString:cStrArr encoding:NSASCIIStringEncoding];
NSLog(@"StrArr = %@",StrArr);//StrArr = 1234
NSLog(@"sizeof(cStrArr)=%ld",sizeof(cStrArr));//sizeof(cStrArr)=4
NSLog(@"StrArr length = %ld",[StrArr length]);//StrArr length = 4
2.
char a = '1';
NSLog(@"a = %c",a);//a = 1
NSLog(@"sizeof(a)= %ld",sizeof(a));//sizeof(a)= 1
总结(3):OC中有Char类型。跟c一样。
3.
//NSString->char
NSString * str1 = @"123";
char *cStr1 = [str1 cStringUsingEncoding:NSASCIIStringEncoding];
NSLog(@"cStr1 = %s",cStr1);//cStr1 = 123
NSLog(@"sizeof(cStr1)=%ld",sizeof(cStr1));//sizeof(cStr1)=8
NSLog(@"sizeof(str1)= %ld",sizeof(str1));//sizeof(str1)= 8
NSLog(@"str1 length = %ld",[str1 length]);//str1 length = 3
NSLog(@"strlen(cStr1)=%ld",strlen(cStr1));//strlen(cStr1)=3
for (int i = 0; i<<span style="color: #3d1d81">strlen(cStr1); i++) {
NSLog(@"%c",cStr1[i]);//1, 2,3
}
(5)
// NSString->NSData
NSString * str = @"123";
NSLog(@"str length = %ld",[str length]);//str length = 3,注意[str length]=3.而strlen(str)=6,因为str是一个对象,里面包含NSInteger 和首地址。
NSLog(@"sizeof(str)=%ld",sizeof(str));//sizeof(str)=8
NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding];
NSLog(@"ASCII:123 = %@",data);//ASCII:123 = <313233>
NSLog(@"data byte=%s",[data bytes]);//data byte=123 注意此处
NSData *data1 = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"UTF8:123 = %@",data1);//UTF8:123 = <313233>
总结(5):[data bytes]使用%s输出字符串。
(6)
// NSData ->NSString
NSString *switchStr = [[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"switchStr = %@",switchStr);//switchStr = 123
(7)
//NSData->Byte
Byte *testByte = (Byte*)[data1 bytes];//得到data1中bytes的指针。
// 得到以testByte为首地址,长度为[data1 length]的数据。
for(int i = 0;i<[data1 length];i++)
NSLog(@"testByte = %d\n",testByte[i]);//49,50,51
(8)
//Byte->NSData
NSData *bData = [[NSData alloc]initWithBytes:testByte length:strlen(str)];//注意这种写法错误,str是NSString类型无strlen方法。
NSLog(@"bData length = %ld",(unsigned long)[bData length]);//bData length = 6,
NSData *bData1 = [[NSData alloc]initWithBytes:testByte length:[str length]];//这样写是正确的
NSLog(@"bData length = %ld",(unsigned long)[bData1 length]);//bData length = 3
(9)
//Byte->NSString
NSString *switchStr1 = [[NSString alloc]initWithBytes:testByte length:[data1 length]encoding:NSUTF8StringEncoding];
NSLog(@"switchStr1 = %@",switchStr1);//switchStr1 = 123
NSString *accountDomain = @"baidu.com";
// NSString->const char * :const char * xx = [NSString utf8String];
(10) const char *,char *是可以转成NSString*的,只是得加上长度。
struct hostent *hostent = gethostbyname([accountDomain UTF8String]);
struct in_addr *addr = (struct in_addr*)hostent->h_addr_list[0];
//得到IP字符串
struct sockaddr_in sockAdd;
sockAdd.sin_addr = *addr;
printf("%s\n",inet_ntoa(sockAdd.sin_addr));//220.181.111.86
const char * xx = inet_ntoa(sockAdd.sin_addr);
NSString *ch = [[NSString alloc]initWithBytes:xx length:strlen(xx)encoding:NSUTF8StringEncoding];
NSLog(@"%@",ch);//220.181.111.86
NSString *withChinese = @"this 这个";
// 把NSString->NSdata
NSData *withChineseData = [withChinese dataUsingEncoding:NSASCIIStringEncoding];
NSLog(@"withchineseData:%@",withChineseData);//withchineseData:(null)
NSData *withChineseDataUsingUTF8 = [withChinese dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"withChineseDataUsingUTF8:%@",withChineseDataUsingUTF8);//withChineseDataUsingUTF8:<74686973 20e8bf99 e4b8aa>
//NSData->NSString
NSString *Chinese = [[NSString alloc]initWithData:withChineseDataencoding:NSASCIIStringEncoding];
NSLog(@"NSString->NSData->NSString:%@",Chinese);
NSString *ChineseUsingUTF8 = [[NSString alloc]initWithData:withChineseDataUsingUTF8encoding:NSUTF8StringEncoding];
NSLog(@"NSString->NSData->NSString UTF8:%@",ChineseUsingUTF8);//NSString->NSData->NSString UTF8:this 这个
结论:带汉字使用ASCII码编码不成功。需要使用UTF8编码