16进制字符串转化为字节(byte)数组,16进制字符串的异或运算

16进制字符串转化为字节(byte)数组,16进制字符串的异或运算:

-(NSString*)generateCRC:(NSString*)str{

    //把16进制字符串转换成字节数组

    long len = ([str length]/2);

    int j=0;

    Byte result[str.length/2];

    for(inti=0;i<[str length];i++)

    {

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

        unichar hex_char1 = [strcharacterAtIndex: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 = [strcharacterAtIndex:i];//两位16进制数中的第二位(低位)

        int int_ch2;

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

        {

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

        }

        else if(hex_char2 >='A'&& hex_char2 <='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);

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

        j++;

    }

// 异或运算

    Byte check[1];

    NSString*hexStr=@"";

    for(inti =0; i

        if(i ==0) {

            check[0] = result[0];

        }else{

            check[0] ^=result[i];

        }

    }

    NSData*adata = [[NSData alloc]initWithBytes:checklength:1];

    hexStr = [self HexStringWithData:adata];

    hexStr = [hexStr uppercaseString];

    return hexStr;

}

-(NSString*)HexStringWithData:(NSData*)data{

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

    NSString*hexStr=@"";

    for(inti=0;i<[datalength];i++) {

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

        if([newHexStrlength]==1){

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

        }

        else{

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

        }

    }

    hexStr = [hexStr uppercaseString];

    return hexStr;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容