Как преобразовать / манипулировать файлом BINARY в файл ASCII? - PullRequest
0 голосов
/ 15 июля 2009

Я ищу способ взять символы TEXT из 4-байтового двоичного файла в массив или файл TEXT,

Допустим, мой входной файл:

00000000  2e 00 00 00 01 00 00 00  02 00 00 00 03 00 00 00  |................|
00000010  04 00 00 00 05 00 00 00  06 00 00 00 07 00 00 00  |................|
00000020  08 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000070  00 00 00 00 00 00 00 00                           |........|
00000078

И мой желаемый результат:

46,1,2,3,4,5,6,7,8,9,0,0...

Вывод может быть файлом TEXT или массивом.

Я заметил, что здесь могут помочь функции упаковки / распаковки, но я не мог понять, как их правильно использовать,

Пример был бы неплох.

Ответы [ 3 ]

9 голосов
/ 15 июля 2009

Использование unpack:

local $/;
@_=unpack("V*", <>);

возвращает вам массив. Так что как неэффективный (не примеряйте большие файлы) пример:

perl -e 'local$/;print join(",",map{sprintf("%d",$_)}unpack("V*",<>))' thebinaryfile
1 голос
/ 15 июля 2009

Ответ зависит от того, что вы считаете символом ASCII. Все, что ниже 128, технически является символом ASCII, но я предполагаю, что вы имеете в виду символы, которые вы обычно найдете в текстовом файле. В этом случае попробуйте это:

#!/usr/bin/perl

use strict;
use warnings;
use bytes;

$/ = \1024; #read 1k at a time
while (<>) {
    for my $char (split //) {
        my $ord = ord $char;
        if ($char > 31 and $char < 127 or $char =~ /\r\n\t/) {
            print "$ord,"
        }
    }
}
0 голосов
/ 23 июня 2010
od -t d4 -v <filename>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...