
$ echo "hello" | od
0000000 062550 066154 005157
0000006
Я знаю, что первый столбец представляет смещение байта. Но я не вижу, как формируются другие числа. Согласно man
вышесказанному, должно быть "octal bytes". Однако опция -b
должна также "select octal bytes", и она печатает что-то другое:
$echo "hello" | od -b
0000000 150 145 154 154 157 012
0000006
EDIT: Кстати, это то, что я ожидаю увидеть, т. е. значения ascii всех символов в «hello\n» в виде того, что я ожидаю назвать «восьмеричными байтами».
решение1
od
не показывает байты по умолчанию, он показывает слова в восьмеричном формате. Это может быть не совсем интуитивно, но не забывайте, od
что этооченьстарая команда :-) Я буду использовать пример попроще, чем вы:
$ echo -en '\01\02' | od
0000000 001001
0000002
Поскольку Intel используетпрямой порядок байтовархитектура, байты \01\02
интерпретируются как 00000010 00000001
двоичные.
Поскольку каждая восьмеричная цифра представляет собой 3 бита, мы можем сгруппировать это число следующим образом:
(0)(000)(001)(000)(000)(001)
Итак, восьмеричное представление этих двух байтов следующее:
001001
Для повседневного использования это довольно бесполезно; возможно, когда-то это было удобно для ручной отладки дампов памяти :-)
Ваш hello\n
пример:
h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
\n= 00001010
Теперь все немного сложнее, потому что восьмеричные цифры представляют 3 бита, а байты — 8 бит; поэтому добавляется заполнение :-( Результат символически выглядит так:
PehPllP\no
Помните, что каждый набор из 2 байтов меняет местами из-за порядка байтов.пявляется дополнением 2 битами. Результат в восьмеричном виде (используя косую черту в качестве разделителя):
00/01100101/01101000/00/01101100/01101100/00/00001010/01101111
Теперь в восьмеричных группах по 3 бита:
000 110 010 101 101 000 000 110 110 001 101 100 000 000 101 001 101 111
Перевод в восьмеричные цифры:
062550066154005157
Это соответствует вашему результату.
В заключение вы, вероятно, поняли, что od
отсутствие вариантов хуже, чем бесполезность :-)