美文网首页
5-16 iOS 十六进制转二进制

5-16 iOS 十六进制转二进制

作者: RBNote | 来源:发表于2017-05-17 01:45 被阅读273次

项目中需要用到进制转换的知识, 参考了
【iOS 开发】二进制、十进制、十六进制相互转换的方法
本来很happy ,一运行就见红. 傻眼了. 拿来主义不好用啊!

NSString 拼接nil 直接崩溃.png

崩溃说明:

1.请显示考一个问题 0x0f 和 0x0F 有什么区别?
2.当为小写字符 f 时, hexDic[@"f"] 取出来的就为 nil ,因为没有对应的 f这个key. 这就是f 和 F 的区别. 字典的key是分大小写的. 十六进制data 区别区分,留给你思考吧.
3.不可变字符串拼接一个 nil 直接崩溃

解决办法

1.不管三七二十一 先将 key 转为大写
2.使用NSMutableString 可变字符串
3.代码如下

/**十六进制字符串转二进制*/
- (NSString *)getBinaryByHex:(NSString *)hex {
    NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] initWithCapacity:16];
    [hexDic setObject:@"0000" forKey:@"0"];
    [hexDic setObject:@"0001" forKey:@"1"];
    [hexDic setObject:@"0010" forKey:@"2"];
    [hexDic setObject:@"0011" forKey:@"3"];
    [hexDic setObject:@"0100" forKey:@"4"];
    [hexDic setObject:@"0101" forKey:@"5"];
    [hexDic setObject:@"0110" forKey:@"6"];
    [hexDic setObject:@"0111" forKey:@"7"];
    [hexDic setObject:@"1000" forKey:@"8"];
    [hexDic setObject:@"1001" forKey:@"9"];
    [hexDic setObject:@"1010" forKey:@"A"];
    [hexDic setObject:@"1011" forKey:@"B"];
    [hexDic setObject:@"1100" forKey:@"C"];
    [hexDic setObject:@"1101" forKey:@"D"];
    [hexDic setObject:@"1110" forKey:@"E"];
    [hexDic setObject:@"1111" forKey:@"F"];
    
    
    NSMutableString *binary = [NSMutableString string];
    for (int i = 0; i < hex.length; i++) {
        NSString *key = [hex substringWithRange:NSMakeRange(i, 1)];
        
        key = key.uppercaseString; //不管三七二十一,先转为大写字母再说
        NSString *binaryStr = hexDic[key];
        
        [binary appendString:[NSString stringWithFormat:@"%@",binaryStr]];
    }
    
    NSLog(@"十六进制转换为二进制:%@ %lu个bytes",binary,binary.length/8);
    
    return binary;
}

相关文章

  • iOS-二进制、十进制、十六进制相互转化

    //十进制转十六进制字符串 //二进制转十进制 //十六进制转二进制 //十六进制转十进制 // 十进制转二进制...

  • 5-16 iOS 十六进制转二进制

    项目中需要用到进制转换的知识, 参考了【iOS 开发】二进制、十进制、十六进制相互转换的方法本来很happy ,一...

  • 进制转换

    1.十进制转二进制 2.二进制转十进制 3.十进制转十六进制 4.十六进制转十进制 5.二进制转十六进制 6.十六...

  • JS进制转换

    二进制转十进制 二进制转八进制 二进制转十六进制

  • 9月9号学习笔记

    1、二进制转十六进制 四位二进制表示一位十六进制,先把四位二进制转成十进制,再转成十六进制eg:10110110=...

  • 最常见的进制之间的转化

    1.首先是二进制,八进制,十六进制转十进制. 2:八进制,十进制,十六进制转二进制. 3: 二进制,八进制,十进制...

  • Python编程练习045:十进制转二进制,八进制,十六进制

    Python 十进制转二进制、八进制、十六进制 以下代码用于实现十进制转二进制、八进制、十六进制: 获取用户输入十...

  • 一、数据的表示

    R进制转十进制(加权法) 十进制转二进制(短除法) 二进制转八、十六进制 原码、反码、补码、移码

  • python各种进制转换

    python转二进制bin('10')python转八进制oct('10')python转十六进制hex('10'...

  • JAVA基础第五天

    进制 进制转换其他进制转十进制 十进制转其他进制 二进制转八进制,十六进制 八进制转二进制

网友评论

      本文标题:5-16 iOS 十六进制转二进制

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