2013-10-24 4 views
0

Я пытаюсь создать калькулятор Binary to Decimal, и у меня возникают проблемы с любым преобразованием, которое действительно будет работать. Прежде всего, я хотел бы представить себя как полный новичок в объективе c и для программирования в целом. В результате многие концепции мне кажутся трудными, поэтому я в основном ищут самый простой способ понять, а не самый эффективный способ сделать это. У меня есть калькулятор, который будет принимать входные данные и отображать их на этикетке. Эта часть работает нормально, и у меня нет проблем с ней. Переменная, которую вводит вход, равна _display = [[NSMutableString stringWithCapacity:20] retain]; , это отлично работает, и я могу соответствующим образом изменить данные. То, что я хотел бы сделать, - показать NSString преобразования в другой метке. На данный момент я попробовал несколько решений и не имели каких-либо достойных результатов, это последняя попыткаПреобразование строковой переменной из двоичного в десятичный в Objective C

- (NSMutableString *)displayValue2:(long long)element 
{ 
    _str= [[NSMutableString alloc] initWithString:@""];  
    if(element > 0){ 
     for(NSInteger numberCopy = element; numberCopy > 0; numberCopy >>= 1) 
     { 

      [_str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0]; 
     } 
} 
    else if(element == 0) 
    { 
     [_str insertString:@"0" atIndex:0]; 
    } 
    else 
    { 
     element = element * (-1); 

     _str = [self displayValue2:element]; 
     [_str insertString:@"0" atIndex:0]; 
     NSLog(@"Prima for: %@",_str); 
     for(int i=0; i<[_str length];i++) 

     _str = _display; 
     NSLog(@"Dopo for: %@",_str); 
    } 
    return _str; 

} 

В моей View Controller У меня есть настройки кнопку Преобразовать, когда нажата, я хочу, чтобы установить второй поле отображения к десятичному эквиваленту. Это работает так, как будто я устанавливаю displayValue2 для возврата строки из моего выбора. Все, что мне нужно, это помочь получить это преобразование. На данный момент этот бит кода привел к тому, что «неполная реализация» отображается в моем классе. Пожалуйста, помогите и приветствуйте тех, кто принимает тайм-аут, чтобы помочь.

+1

A) Если вы полный новичок в программировании вообще, что, черт возьми, вы делаете программирование в Objective-C. Вы должны по крайней мере сначала изучить Java, если не C или C++. B) научиться писать комментарии. C) «Незавершенная реализация» означает, что вы оставили метод класса, который вы объявили в файле .h. D) NSString имеет ряд методов преобразования - doubleValue, intValue, boolValue и т. Д. E) «Двоичный дециметровый калькулятор» - плохое описание чего-либо. Вы вводите двоичный символ символа и отображаете символ десятичным? –

ответ

1

Итак, в основном все, что вы действительно ищете, это способ преобразования двоичных чисел в десятичные числа, правильно? Другой способ подумать об этой проблеме - это изменить базу чисел от базы 2 до базы 10. Я использовал такие функции, как это раньше в моих проектах:

+ (NSNumber *)convertBinaryStringToDecimalNumber:(NSString *)binaryString { 
    NSUInteger totalValue = 0; 
    for (int i = 0; i < binaryString.length; i++) { 
     totalValue += (int)([binaryString characterAtIndex:(binaryString.length - 1 - i)] - 48) * pow(2, i); 
    } 
    return @(totalValue); 
} 

Очевидно, что это обращается в двоичном виде строкового представления. Это хорошо работает, так как вы можете легко получить доступ к каждому значению по сравнению с более сложным числом. Вы также можете легко изменить тип возврата из NSNumber в некоторый строковый литерал. Это также работает для вашего сценария element == 0.

// original number wrapped as a string 
NSString *stringValue = [NSString stringWithFormat:@"%d", 11001]; 
// convert the value and get an NSNumber back 
NSNumber *result = [self.class convertBinaryStringToDecinalNumber:stringValue]; 
// prints 25 
NSLog(@"%@", result); 

Если я неправильно понял что-то, пожалуйста, уточните, если вы не поняли код, сообщите мне. Кроме того, это может быть не самым эффективным, но это просто и чисто.

Я также категорически согласен с комментарием Hot Licks. Если вы действительно заинтересованы в том, чтобы хорошо учиться и хотите быть развитым программистом, есть несколько основ, которые вы должны изучать в первую очередь (я научился с Java и рад, что я это сделал).

+0

Спасибо за помощь, но я считаю, что это трудно понять и реализовать. Что касается моего опыта, я сделал Java, мы быстро пропустили его, возможно, слишком быстро и далеки от полной эффективности. Я также сделал несколько Actionscript. Теперь мы делаем цель C и снова двигаемся быстро, только познакомившись с ней 5 недель назад. Это курс колледжа, где Im сделал для выполнения заданий программирования, im не делая это для удовольствия. Я объявил себя новичком, так как я не хочу давать людям впечатление, которое хорошо разбирается в этом. в основном я только что нашел этот совет, снисходительный к тем, кто просит о помощи. –

+0

Что именно следует помещать в мой файл .h, чтобы заставить это работать. Также у меня есть кнопка в моем контроллере просмотра, которую я хочу запустить этот бит кода «_displayField».text = [calculator displayValue2]; ", когда кнопка нажата, он должен установить мой дисплей в строку, возвращаемую с displayValue2. –

+0

@TheSpk Я понимаю ваши проблемы из вашего первого комментария. Вам не нужно ничего помещать в свой' .h'. (скорее всего). Просто поместите этот метод в свою реализацию. Затем в своей кнопке действия поместите свой пример кода (в мой второй блок). После того, как вы получите результат, поместите его в новое поле. – Firo

Смежные вопросы