ios十进制、十六进制字符串,byte,data等之间的转换

ios十进制、十六进制字符串,byte,data等之间的转换

尊重原创精神,此文章为转载,里面的转换帮了我很的大忙,我决定都记录下来方便以后查看,同时我会定期更新工作中遇到的各种转换算法留作记录。

十进制->十六进制

Byte bytes[] = {0xA6,0x27,0x0A};

NSString *strIdL  = [NSString stringWithFormat:@"%@",[[NSString alloc]initWithFormat:@"%02lx",(long)bytes[0]]];

十六进制->十进制

NSString *rechargeInfo =  @"0xff055008";

NSString *cardId2 = [rechargeInfo substringWithRange:NSMakeRange(2,2)];
cardId2 = [NSString stringWithFormat:@"%ld",strtoul([cardId2 UTF8String],0,16)];

NSString *str = @"0xff055008";
//先以16为参数告诉strtoul字符串参数表示16进制数字,然后使用0x%X转为数字类型
unsigned long red = strtoul([str UTF8String],0,16);

//strtoul如果传入的字符开头是“0x”,那么第三个参数是0,也是会转为十六进制的,这样写也可以:

unsigned long red = strtoul([@"0x6587"UTF8String],0,0);
NSLog(@"转换完的数字为:%lx",red);

字符串处理方法

+ (NSString *)cutString:(NSString *)str{
   NSString *targetStr=nil;

   if (str.length>9) {
    targetStr=[str substringFromIndex:9];
   }
   return targetStr;
}

字符串补零操作

+ (NSString *)addZero:(NSString *)str withLength:(int)length{
    NSString *string = nil;
    if (str.length==length) {
      return str;
    }
    if (str.length<length) {
       NSUInteger inter = length-str.length;
    for (int i=0;i< inter; i++) {
        string = [NSString stringWithFormat:@"0%@",str];
        str = string;
    }
    }
    return string;
}

+ (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;
    NSLog(@"myBuffer is %c",myBuffer[i /2] );
  }
  NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];
  NSLog(@"———字符串=======%@",unicodeString);
  return unicodeString; 
}

10进制->16进制

+ (NSString *)ToHex:(longlong int)tmpid{

   NSString *nLetterValue;
   NSString *str =@"";
   long longint ttmpig;

   for (int i =0; i<9; i++) {
      ttmpig=tmpid%16;
      tmpid=tmpid/16;
      switch (ttmpig)
     {
        case 10:
            nLetterValue =@"A";break;
        case 11:
            nLetterValue =@"B";break;
        case 12:
            nLetterValue =@"C";break;
        case 13:
            nLetterValue =@"D";break;
        case 14:
            nLetterValue =@"E";break;
        case 15:
            nLetterValue =@"F";break;
        default:nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];      
    }
    str = [nLetterValue stringByAppendingString:str];
    if (tmpid == 0) {
        break;
    }
   }
    return str;
}

16进制字符串->NSData

+ (NSMutableData *)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 < [strlength]; i += 2) {
       unsigned int anInt;
       NSString *hexCharStr = [str substringWithRange:range];
       NSScanner *scanner = [[NSScanner alloc]initWithString:hexCharStr];
    
       [scanner scanHexInt:&anInt];
       NSData *entity = [[NSData alloc]initWithBytes:&anIntlength:1];
       [hexData appendData:entity];
    
       range.location += range.length;
       range.length = 2;
   }
   return hexData;
}

+ (NSString *)convertDataToHexStr:(NSData *)data {
   if (!data || [data length] == 0) {
       return @"";
   }
   NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];

   [data enumerateByteRangesUsingBlock:^(constvoid *bytes, NSRange byteRange,BOOL *stop) {
       unsigned char *dataBytes = (unsignedchar*)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;
}

十进制->十六进制字符串

+ (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 *) parseByteArray2HexString:(Byte[]) bytes{

   NSMutableString *hexStr = [[NSMutableString alloc]init];

   int i = 0;
   if(bytes){
      while (bytes[i] != '\0')
   {
        NSString *hexByte = [NSString stringWithFormat:@"%x",bytes[i] & 0xff];//16进制数
        if([hexByte length]==1)
            [hexStr appendFormat:@"0%@", hexByte];
        else
            [hexStr appendFormat:@"%@", hexByte];         
        i++;
     }
   }
   NSLog(@"bytes 的16进制数为:%@",hexStr);
   return hexStr;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341