我有一个程序,需要用户输入IOS文本字段并将其转换为二进制,十六进制,dec等。我无法实现一种算法,无需递归即可将十六进制直接转换为二进制。有什么建议怎么做?
这是我尝试过的方法,但确实不起作用

 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;
}


此方法不进行验证以确保传递的字符串实际上是纯十六进制字符串,因此您可能需要考虑这一点。



或者,有以下选项:

- (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;
}


我认为第一个例子肯定更清洁。我不确定哪个例子会更快。

关于ios - objective-c 中的十六进制到二进制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22394564/

10-09 20:35
查看更多