Возможно ли преобразовать Dec в Bin с помощью функции printf в Linux?
Нет, C printf
не имеет модификатора формата для двоичного форматирования (http://www.cplusplus.com/reference/cstdio/printf/), и утилита linux printf
также не расширяет его (%b
is "расширяет escape-последовательности обратной косой черты в соответствующем аргументе" ).Инструмент printf
все еще может быть омрачен вашей конкретной оболочкой, которая может в конечном итоге добавить больше форматеров, тогда вам придется проверить руководство по вашей оболочке (например, bash несколько расширяет его , но по-прежнему нет "бинарного""formatter).
Что еще (преобразование чисел) можно сделать с помощью Linux printf?
От шестнадцатеричного до десятичного?От шестнадцатеричного до октального?От шестнадцатеричного к двоичному?
Он должен поддерживать общие входы в формате C (т. Е. 0xN
для шестнадцатеричного ввода и 0N
для восьмеричного ввода), например:
$ printf "%d %d %#x %#o\n" 0x10 010 16 8
16 8 0x10 010
Так что да, вы можете в основном конвертировать десятичную / шестнадцатеричную / восьмеричную в десятичную / шестнадцатеричную / восьмеричную, любую комбинацию, используя желаемый формат ввода и формат вывода.
На самом деле вы как бы думаете об этом неправильно, это отдельныйвходное в двоичное преобразование и двоичное в выходное, т. е. когда вы помещаете «16» в качестве значения аргумента для printf, оно передается инструменту в виде строки, затем он анализирует строку по анализатору значения, обнаруживая «16» в десятичном формате, преобразовываяэто к собственному целочисленному значению 16 (т. е. двоичное внутри процессора), и затем оно, наконец, преобразует его обратно в строку в соответствии со спецификатором формата в строке формата, то есть "% # x" произведет шестнадцатеричное форматирование этого внутреннего (двоичного) целого числаvalue ("0x10").
Если вы хотите, чтобы "двоичный" вывод для вас проверял значение, опытные программисты на ассемблере не будут беспокоиться об этом,они учатся читать шестнадцатеричное число на отдельные биты, потому что в шестнадцатеричном формате каждая цифра состоит ровно из 4 битов (0000 = 0x0, 0001 = 0x1, ..., 1110 = 0xE, 1111 = 0xF), поэтому с помощью шестнадцатеричного форматирования вы можете вполнелегко читать любой интересующий вас фрагмент.Хотя истинный двоичный вывод делает его немного проще, показывая непосредственно 0/1, но с 32- и 64-битными значениями он немного длиннее и затрудняет сохранение информации о положении, эта часть несколько проще в шестнадцатеричном виде (так как каждый двацифры 8 бит = один байт).