Итерируете ли вы строку от 0 до 11 или от 11 до 0, decNumber += digitNum * pow(2,i)
устанавливает бит на основе индекса символа.Быстрое решение состоит в том, чтобы использовать pow(2,11-i)
вместо этого, поэтому позиция 11 в строке получает 2 ** 0, позиция 10 получает 2 ** 1 и т. Д.
Хотя лучший способ сделать это,будет выглядеть так:
int decNumber = 0;
int i;
for(i = 0; i <=11; i++)
{
NSString *digitChar = [theBinary substringWithRange: NSMakeRange (i, 1)];
int digitNum = [digitChar intValue];
NSLog(@"digitNum: %d", digitNum);
decNumber = (decNumber << 1) | (digitNum == 1 ? 1 : 0);
}
При обработке каждой цифры в строке, (decNumber << 1)
сдвигает все ранее обработанные биты на 1, а | (digitNum == 1 ? 1 : 0)
устанавливает младший бит в числе на0 или 1 на основе только что прочитанного символа.Конечно, это можно улучшить и далее, например, путем более эффективного анализа строки, но я оставлю это в качестве упражнения для читателя.