LINUX.ORG.RU

xxd и значение flags

 ,


0

2

Добрый день!

Простите, пока буду в каждом сообщении писать оговорку про то, что я новичок и вопросы у меня соответствующие. Разбираю файл bmp. Для того, чтобы вывести в Терминале информацию о файле в задании предложено использовать такую команду:

 
xxd -c 24 -g 3 -s 54 file.bmp
Вот результат:
0000036: ffffff ffffff 0000ff 0000ff 0000ff 0000ff ffffff ffffff  ........................
000004e: ffffff 0000ff ffffff ffffff ffffff ffffff 0000ff ffffff  ........................
0000066: 0000ff ffffff 0000ff ffffff ffffff 0000ff ffffff 0000ff  ........................
000007e: 0000ff ffffff ffffff ffffff ffffff ffffff ffffff 0000ff  ........................
0000096: 0000ff ffffff 0000ff ffffff ffffff 0000ff ffffff 0000ff  ........................
00000ae: 0000ff ffffff ffffff 0000ff 0000ff ffffff ffffff 0000ff  ........................
00000c6: ffffff 0000ff ffffff ffffff ffffff ffffff 0000ff ffffff  ........................
00000de: ffffff ffffff 0000ff 0000ff 0000ff 0000ff ffffff ffffff  ........................ 

Я посмотрела значение flags

 http://linuxcommand.org/man_pages/xxd1.html 
но все же не поняла их использование, особенно значение параметров. Например, -c как я понимаю и как обычно используется - это количество «колонок» и параметр 24 видимо означает 24 бита или 3 байта на «группу». Например, ffffff (белый цвет) = 3 по 8 бит. Это верно?

 -g обозначет количество байтов на "группу", то есть -g 3 как
раз означает, что каждая группа имеет 3 байта. Но если я верно 
поняла первый flag -с, то -g получается повторяет информацию.
Ествественно, я не пытаюсь оспорить стандарт (!), а пытаюсь понять
его.
 -s мне не очень понятен. 54 как я понимаю означает первые
54 байта bmp файла (14 + 40 на два headers). Далее сказано, что
без этого -s flag файл начнется с текущей позиции. Это как? 

Спасибо!

 xxd -c 24 -g 3 file.bmp 

xxd	 — в данном случае, 16-ричный, дамп
-c 24	 — байт в строке
-g 3	 — байт в группе
-s 54	 — пропустить байт
file.bmp — имя файла

Что тут не понятного? Вывести файл по 24/3 = 8 групп в одной строке, пропустив заголовок и сделать каждую группу длиной три байта.

А где такое задание? Надо читать оригинальный man xxd.

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 3)

Параметр s — это с какого байта начиная выводить файл. По умолчанию, очевидно, ноль — то есть файл выводится с самого начала. Остальное элементарно, вот для наглядности: (файл file.bin содержит байты, увеличивающиеся на 1, т.е. 00 01 02 03 04 05 06 07 08...

xxd -c 6 -g 3 file.bin (в строке 6 байт, колонки по три)

00000000: 000102 030405 00000006: 060708 090A0B

xxd -s 1 -c 6 -g 3 file.bin (читаем, пропустив 1 байт в файле, формат вывода тот же)

00000001: 010203 040506 00000007: 070809 0A0B0C

xxd -s 1 -c 6 -g 2 file.bin (пропустив 1 байт, но по 2 байта в колонке)

00000001: 0102 0304 0506 00000007: 0708 090A 0B0C

и т.д., и т.п.

olegkrutov ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.