我有一个程序,需要用户输入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/