美文网首页
iOS data转换成16进制字符串以及16进制字符串转data

iOS data转换成16进制字符串以及16进制字符串转data

作者: 听歌么 | 来源:发表于2020-07-16 10:05 被阅读0次

    NSData转16进制字符串收到NSNull,尝试以下方式都是空值:

    [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    [NSString stringWithUTF8String:[data bytes]];
    

    以上获得的新字符就会为nil,这时我们应该这样转:

    //十六进制的string为转换data
    + (NSData *) stringToHexData:(NSString *)hexStr
    {
        int len = [hexStr length] / 2;    // Target length
        unsigned char *buf = malloc(len);
        unsigned char *whole_byte = buf;
        char byte_chars[3] = {'\0','\0','\0'};
        
        int i;
        for (i=0; i < [hexStr length] / 2; i++) {
            byte_chars[0] = [hexStr characterAtIndex:i*2];
            byte_chars[1] = [hexStr characterAtIndex:i*2+1];
            *whole_byte = strtol(byte_chars, NULL, 16);
            whole_byte++;
        }
        
        NSData *data = [NSData dataWithBytes:buf length:len];
        free( buf );
        return data;
    }
    
    
    //data转换为十六进制的string
    + (NSString *)hexStringFromData:(NSData *)myD{
        
        Byte *bytes = (Byte *)[myD bytes];
        //下面是Byte 转换为16进制。
        NSString *hexStr=@"";
        for(int i=0;i<[myD 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(@"hex = %@",hexStr);
        
        return hexStr;
    }
    

    相关文章

      网友评论

          本文标题:iOS data转换成16进制字符串以及16进制字符串转data

          本文链接:https://www.haomeiwen.com/subject/pcouhktx.html