iOS_NSdata/NSString/Byte等的转换

项目时期, 遇到过的各种数据类型的转换, 希望对大家有所帮助!

    /**

     * 1. NSData> NSString

     */

    NSData *data;

    

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

    

    /**

     *  2. NSString> NSData

     */

    NSString *string = @"abc123";

    

    NSData *aData = [string dataUsingEncoding: NSUTF8StringEncoding];

    

    /**

     *  3. NSData> Byte数组

     */

    NSString *testStr = @"1234567890";

    

    NSData *testData = [testStr dataUsingEncoding: NSUTF8StringEncoding];

    

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

    

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

        

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

    

    /**

     *  4. Byte数组-> NSData

     */

    Byte byte[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};

    

    NSData *adata = [[NSData alloc] initWithBytes:byte length:24];

    


    /**

     *  5. Byte数组->16进制数

     */

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

    

    NSString *hexStr=@"";

    

    NSData *encryData;

    

    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);



    /**

     * 6. 16进制数->Byte数组

     */

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

    

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

    

    int j=0;

    

    Byte bytes[128];  ///3ds keyByte 数组, 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;   0Ascll - 48

        

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

            

            int_ch1 = (hex_char1-55)*16; AAscll - 65

        

        else

            

            int_ch1 = (hex_char1-87)*16; aAscll - 97

        

        i++;

        

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

        

        int int_ch2;

        

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

            

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

        

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

            

            int_ch2 = hex_char2-55; AAscll - 65

        

        else

            

            int_ch2 = hex_char2-87; aAscll - 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);

    

    

    /**

     *  7. NSData UIImage

     */

    

    /*--------------- NSData>UIImage -------------*/

    NSData *imageData;

    

    UIImage *aimage = [UIImage imageWithData:imageData];

    

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

    

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

    

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

    

    NSString *finalPath = [path stringByAppendingPathComponent: name];

    

    NSData *imageData1 = [NSData dataWithContentsOfFile: finalPath];

    

    UIImage *aimage1 = [UIImage imageWithData: imageData1];

    

    /*-------------- UIImage> NSData ------------*/

    

    NSData *imageData2 = UIImagePNGRepresentation(aimage);




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值