美文网首页
iOS 与十六进制转换

iOS 与十六进制转换

作者: T_label | 来源:发表于2017-02-07 16:16 被阅读1921次
  • 普通字符串转换为十六进制的。
    - (NSString *)hexStringFromString:(NSString *)string{
    NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding];
    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];
    }
    return hexStr;
    }

  • 十六进制转换为普通字符串的。
    - (NSString *)stringFromHexString:(NSString *)hexString {
    char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1);
    bzero(myBuffer, [hexString length] / 2 + 1);
    for (int i = 0; i < [hexString length] - 1; i += 2) {
    unsigned int anInt;
    NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)];
    NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr];
    [scanner scanHexInt:&anInt];
    myBuffer[i / 2] = (char)anInt;
    }
    NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];
    NSLog(@"字符串%@",unicodeString);
    return unicodeString;
    }

  • 数字转十六进制字符串
    - (NSString *)stringWithHexNumber:(NSUInteger)hexNumber{
    char hexChar[6];
    sprintf(hexChar, "%x", (int)hexNumber);
    NSString *hexString = [NSString stringWithCString:hexChar encoding:NSUTF8StringEncoding];
    return hexString;
    }

  • 十六进制字符串转数字
    - (NSInteger)numberWithHexString:(NSString *)hexString{
    const char *hexChar = [hexString cStringUsingEncoding:NSUTF8StringEncoding];
    int hexNumber;
    sscanf(hexChar, "%x", &hexNumber);
    return (NSInteger)hexNumber;
    }

  • 将NSData转换成十六进制的字符串
    - (NSString *)convertDataToHexStr:(NSData *)data {
    if (!data || [data length] == 0) {
    return @"";
    }
    NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
    [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
    unsigned char dataBytes = (unsigned char)bytes;
    for (NSInteger i = 0; i < byteRange.length; i++) {
    NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
    if ([hexStr length] == 2) {
    [string appendString:hexStr];
    } else {
    [string appendFormat:@"0%@", hexStr];
    }
    }
    }];
    return string;
    }

  • 将十六进制字符串转换成NSData
    - (NSData *)convertHexStrToData:(NSString *)str {
    if (!str || [str length] == 0) {
    return nil;
    }
    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
    NSRange range;
    if ([str length] % 2 == 0){
    range = NSMakeRange(0, 2);
    } else range = NSMakeRange(0, 1);
    for (NSInteger i = range.location; i < [str length]; i += 2) {
    unsigned int anInt;
    NSString *hexCharStr = [str substringWithRange:range];
    NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
    [scanner scanHexInt:&anInt];
    NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
    [hexData appendData:entity];
    range.location += range.length;
    range.length = 2;
    }
    NSLog(@"hexdata: %@", hexData);
    return hexData;
    }

相关文章

网友评论

      本文标题:iOS 与十六进制转换

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