简体   繁体   English

目标C中的十六进制到二进制

[英]Hexadecimal to Binary in Objective C

I have a program that takes the user input of an IOS text field and converts it into binary, hex, dec etc. I have been unable to implement an algorithm that convert Hexadecimal directly to binary without recursion. 我有一个程序,它接受IOS文本字段的用户输入并将其转换为二进制,十六进制,dec等。我无法实现一种无需递归就将十六进制直接转换为二进制的算法。 Any suggestions how to do this? 有什么建议怎么做? This is what I have tried but it really doesn't work 这是我尝试过的方法,但确实不起作用

 NSString *theNumber = [display text];
 NSMutableString *str = @"";
        for(NSInteger numberCopy = theNumber; numberCopy > 0; numberCopy >>= 1)
        {

           display.text = glGetString;[((numberCopy & 1) ? @"1" : @"0") atIndex:0];
- (NSString*)hexToBinary:(NSString*)hexString {
    NSMutableString *retnString = [NSMutableString string];
    for(int i = 0; i < [hexString length]; i++) {
        char c = [[hexString lowercaseString] characterAtIndex:i];

        switch(c) {
            case '0': [retnString appendString:@"0000"]; break;
            case '1': [retnString appendString:@"0001"]; break;
            case '2': [retnString appendString:@"0010"]; break;
            case '3': [retnString appendString:@"0011"]; break;
            case '4': [retnString appendString:@"0100"]; break;
            case '5': [retnString appendString:@"0101"]; break;
            case '6': [retnString appendString:@"0110"]; break;
            case '7': [retnString appendString:@"0111"]; break;
            case '8': [retnString appendString:@"1000"]; break;
            case '9': [retnString appendString:@"1001"]; break;
            case 'a': [retnString appendString:@"1010"]; break;
            case 'b': [retnString appendString:@"1011"]; break;
            case 'c': [retnString appendString:@"1100"]; break;
            case 'd': [retnString appendString:@"1101"]; break;
            case 'e': [retnString appendString:@"1110"]; break;
            case 'f': [retnString appendString:@"1111"]; break;
            default : break;
        }
    }

    return retnString;
}

This method does no verifying to ensure the passed string is actually a pure hex string, so that's something you may want to consider. 此方法不进行验证以确保传递的字符串实际上是纯十六进制字符串,因此您可能需要考虑这一点。


Alternatively, there's this option: 或者,有以下选项:

- (NSString*)hexToBinary:(NSString*)hexString {
    NSMutableString *retnString = [hexString mutableCopy];

    [retnString replaceOccurencesOfString:@"0"
                               withString:@"0000"
                                  options:NSCaseInsensitiveSearch
                                    range:NSMakeRange(0,[retnString length])];
    // repeat all the way through, much like above example

    return retnString;
}

The first example is certainly cleaner, I think. 我认为第一个例子肯定更清洁。 I'm not certain which example would be faster. 我不确定哪个例子会更快。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM