bc: Почему `ibase=16; obase=10; FF` возвращает FF, а не 255?

bc: Почему `ibase=16; obase=10; FF` возвращает FF, а не 255?

Я использую его bcдля преобразования чисел из двоичной системы в шестнадцатеричную, из восьмеричной в десятичную и другие.

В следующем примере я пытаюсь преобразовать число с основанием 16 (шестнадцатеричное) в двоичное, восьмеричное и десятичное.

У меня не возникло никаких проблем с первыми двумя попытками.

$ echo 'ibase=16; obase=2; FF' | bc  
11111111
$ echo 'ibase=16; obase=8; FF' | bc 
377

Но когда я пытался преобразовать число с основанием 16 (шестнадцатеричное) в число с основанием 10 (десятичное), я получал неправильный ответ. Ответ должен быть255

$ echo 'ibase=16; obase=10; FF' | bc 
FF

решение1

После ibase=16этого дальнейшие входные числа будут в шестнадцатеричном формате,включая10, в obase=10котором представлено десятичное значение 16. Поэтому либо установите obase до, либо установите ее после, используя новую входную базу (теперь шестнадцатеричную):

$ echo 'obase=10; ibase=16; FF' | bc
255
$ echo 'ibase=16; obase=A; FF' | bc
255

Связанный контент