2015-07-01 7 views
1

Я пытаюсь создать волшебный файл базы данных для инструмента UNIX «файл» для определенного формата файла. Я прочитал все руководство (man magic и man file), но не нашел способ вывода 24-битного целочисленного целого числа. Я только нашел 8 бит (байт), 16 бит (бештор), 32 бит (принадлежность) и 64 бит (bequad).magic file: печать 3-байтного значения большого эндиана?

Есть ли способ распечатать 24-битное (3-байтовое) целое число из числа файлов из файла с определенной «магической файловой командой»?

+0

Просто рассчитайте три байта и поместите их в файл в соответствующем порядке в виде 1-байтовых целых чисел. – CiaPan

+0

Что вы подразумеваете под словом «положить их в файл»? У меня нет собственной программы, но я пишу «волшебный» файл для инструмента unix «файл» (http://linux.die.net/man/5/magic). «file» использует волшебный файл для идентификации типов файлов. Я могу сказать инструмент «если файл начинается с ABCD, распечатывает строку« ABCD-файл », а затем печатает« длинное »значение, найденное со смещением 4.». Но я хочу печатать 24 бита, и я не могу «рассчитать», как «Multiply 0x01 с 65536 и 0x02 с 256 и добавить эти три значения». –

+0

Я потерян. Вы пытаетесь * прочитать * 3-байтовое целое из файла или * записать * его в файл? Ваш вопрос и ваш комментарий, кажется, указывают на противоположные действия для меня (но это возможно из-за моего слабого английского). Что такое «инструмент», который вы используете? Нужно ли «печатать» значение как двоично-кодированное или как считываемое человеком ASCII-строку? .... – CiaPan

ответ

0

ОК, я только что нашел способ, чтобы прочитать значение из трех байтов с file:

Вместо «> 0x04 принадлежат х% d» (который печатает 4-байтовый Int из offset 0x04) Я использую команду «> 0x03 & 0x00ffffff принадлежит x% d», которая маскирует первый байт и поэтому читает мое трехбайтовое значение от 0x04.

0

Итак, вы хотите написать правило magic для инструмента U * x file. Ну, согласно описанию magic, вы не можете - magic формат не может описать 3-байтовые данные, поэтому file не может его прочитать (и он не имеет возможности объединить 1-байтовые и 2-байтовые поля). :-(

BTW, я также не мог найти правило для распечатать волшебное значение, найденное в файле - оно используется только внутри, чтобы решить, какое сообщение (описание типа файла) должно быть напечатано, но не включено . в сообщение

+0

Чтобы включить значение в вывод, просто введите строку формата, например «% s» (для строк) или «% d» (для чисел) в выходном сообщении. Слишком плохо, что нельзя использовать трехбайтовое значение. Нет ли «известного» формата файла, который использует такое значение и идентифицируется «файлом»? (Наверное, нет, большинство разработчиков просто использовали бы «int» ...) –