Object-c 类型转换

本文详细介绍了Objective-C中不同数据类型间的转换方法,包括NSString与char*、NSString之间的相互转换,以及NSString、NSData、UIImage、CFDataRef等类型之间的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. NSString 与 char *

char * -> NSString

NSString *str = @"abcde";

NSString *str = [NSString sttringWithFormat: @"%d%@", 10, @"abc"]

NSString -> char *

const char *s = [str UTF8String];

 

2. NSSTring 与 NSStirng

NSString *str1 = @"abcde";

NSString *str2 = [NSString stringWithString: str1];

NSString *str3 = [[NSString alloc] initWithString: str1];

 

3. NSData 与 NSString

NSString->NSData

NSString *str = @"1234abcd";

NSData *data = [str dataUsingEncoding: NSUTF8StringEncoding];

NSData-> NSString

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

 

4.NSData 与 Byte

NSData -> Byte数组

NSString *testString = @"1234567890";

NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];

Byte *testByte = (Byte *)[testData bytes];

for (int i=0; i < [testData length]; i++) {

    NSLog(@"testByte = %d\n",testByte[i]);

}

Byte数组-> NSData

Byte byte[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

NSData *aData = [[NSData alloc] initWithBytes:byte length:10];

Byte数组->16进制数

Byte *bytes = (Byte *)[aData bytes];

NSString *hexStr = @"";

for (int i = 0; i < [encryData length]; i++) {

    NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数

    if ([newHexStr length]==1)

        hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];

    else

        hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];

}

NSLog(@"bytes 的16进制数为:%@",hexStr);

16进制数->Byte数组

// 将16进制数据转化成Byte 数组

NSString *hexString = @"3e435fab9c34891f"; //16进制字符串

int j=0;

Byte bytes[128]; ///3ds key的Byte 数组, 128位

for (int i = 0; i < [hexString length]; i++) {

    int int_ch; /// 两位16进制数转化后的10进制数

    unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)

    int int_ch1;

    if (hex_char1 >= '0' && hex_char1 <='9')

        int_ch1 = (hex_char1-48)*16; //// 0 的Ascll - 48

    else if (hex_char1 >= 'A' && hex_char1 <='F')

        int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65

    else

        int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97

    i++;

    unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)

    int int_ch2;

    if (hex_char2 >= '0' && hex_char2 <='9')

        int_ch2 = (hex_char2-48); //// 0 的Ascll - 48

    else if (hex_char1 >= 'A' && hex_char1 <='F')

        int_ch2 = hex_char2-55; //// A 的Ascll - 65

    else

        int_ch2 = hex_char2-87; //// a 的Ascll - 97

    int_ch = int_ch1+int_ch2;

    NSLog(@"int_ch=%d",int_ch);

    bytes[j] = int_ch; ///将转化后的数放入Byte数组里

    j++;

}

NSData *newData = [[NSData alloc] initWithBytes:bytes length:128];

NSLog(@"newData=%@",newData);

 

4. NSData 与 UIImage

NSData->UIImage

UIImage *aimage = [UIImage imageWithData: imageData];

//例:从本地文件沙盒中取图片并转换为NSData

NSString *path = [[NSBundle mainBundle] bundlePath];

NSString *name = [NSString stringWithFormat:@"ceshi.png"];

NSString *finalPath = [path stringByAppendingPathComponent:name];

NSData *imageData = [NSData dataWithContentsOfFile: finalPath];

UIImage *aimage = [UIImage imageWithData: imageData];

UIImage-> NSData

NSData *imageData = UIImagePNGRepresentation(aimae);

 

6. NSData 与 CFDataRef

NSData *my_nsdata = (__bridge_transfer NSData*)my_cfdata;

NSData *my_nsdata = (__bridge NSData*)my_cfdata;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值