В любом случае, для любого формата файла, я уверен, что вы могли бы написать однострочник, чтобы преобразовать его порядковый номер, используя Perl и pack / unpack . Для некоторых форматов это будет просто более длинная строка, чем для других. ;-)
Илмари Каронен
Ответы:
34
Вы не можете сделать это, потому что для такого преобразования вам нужно знать значение двоичного содержимого.
Если, например, в двоичном файле есть строка, ее нельзя преобразовывать, и 4-байтовое целое может потребовать иной обработки, чем двухбайтовое целое.
Другими словами, для преобразования порядка байтов необходимо описание типа данных.
Я просто хотел сказать это. это не так просто, как просто поменять местами каждую пару байтов. например, 4-байтовое целое число 01 02 03 04 в bigendian может выглядеть следующим образом: little-endian 04 02 03 01 NOT 02 01 04 03 cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
Rob
1
Согласен, в необработанном потоке байтов не имеет смысла порядка байтов ... это должен быть принятый ответ, если OP не редактирует свой вопрос
Томас
[требуется цитата] - AFAIK, если приложение явно не сохраняет некоторый порядок байтов, а не другие, то обычно байты или слова последовательно упорядочены по всему.
Приостановлено до дальнейшего уведомления.
1
@DennisWilliamson: строка UTF-8 или ASCII не имеет порядкового номера. UTF-8 определяет порядок байтов, тогда как ASCII является 7-битным и не имеет многобайтовых токенов. Строка UTF-16 имеет порядковый номер и может иметь или не иметь спецификацию для обозначения этого порядкового номера. Двоичный файл Unix, предназначенный для взаимодействия с Windows или Java, может иметь оба типа строк, что означает, что вы должны различать их при преобразовании.
Кевин
Я пришел сюда в поисках программы, в которой вы даете ей описание данных и данные, и он преобразует их. До сих пор я не нашел такой программы, но это не значит, что это невозможно сделать.
Леви Моррисон
32
Вы можете поменять байты с dd. Это достаточно? Если нет, обновите свой вопрос, чтобы привести пример входного файла и ожидаемого файла.
Если вы не заботитесь о содержимом файла и просто хотите поменять местами байты, попробуйте endconv . Это просто оболочка вокруг стандартных функций преобразования байтов, поэтому она поддерживает преобразование в целые числа длиной 2, 4 и 8 байтов. Это не один лайнер, потому что это отдельная программа.
Ответы:
Вы не можете сделать это, потому что для такого преобразования вам нужно знать значение двоичного содержимого.
Если, например, в двоичном файле есть строка, ее нельзя преобразовывать, и 4-байтовое целое может потребовать иной обработки, чем двухбайтовое целое.
Другими словами, для преобразования порядка байтов необходимо описание типа данных.
источник
Вы можете поменять байты с
dd
. Это достаточно? Если нет, обновите свой вопрос, чтобы привести пример входного файла и ожидаемого файла.источник
Если вы не заботитесь о содержимом файла и просто хотите поменять местами байты, попробуйте endconv . Это просто оболочка вокруг стандартных функций преобразования байтов, поэтому она поддерживает преобразование в целые числа длиной 2, 4 и 8 байтов. Это не один лайнер, потому что это отдельная программа.
источник
Чтобы изменить порядковый номер файла, предполагая размер слова (32-разрядный), этот 1 вкладыш должен работать для вас:
источник