[英]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.