Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Строку в hex


Автор: EvilsInterrupt 7.5.2010, 22:27
Есть строки вида:
Цитата

.0043F371: 55                           push        ebp
.0043F372: 57                           push        edi


удовлетворяющие условию:
Код

(\.[A-F0-9]{8}: )([A-F0-9]+)(.*)


Мне непонятно, как можно $2 переконвертить в байты, т.е. из анси в hex?

Автор: gcc 7.5.2010, 22:35
Код

@Hex = unpack("C*", "Purl Gurl Rocks");

print "@Hex\n";

$ascii = pack("C*", @Hex);

print $ascii;

Автор: EvilsInterrupt 7.5.2010, 22:59
gcc, т.е. мой код должен будет выглядеть примерно так?

Код

my @hex = unpack("C*",@2);
printf DESTFILE $hex;


где @2 это массив от захваченной группы $2 

все так ?

Автор: EvilsInterrupt 7.5.2010, 23:45
Сейчас мой скрипт выглядит так:
Код

#!/usr/bin/perl
use strict;
use warnings;

sub ParseFile
{
    open (SRCFILE,  $_[0])      or die "Can't open source file";
    open (DESTFILE, ">$_[1]")   or die "Can't create destination file";

    while(<SRCFILE>)
    {
        chomp;
        if(/(\.[A-F0-9]{8}: )([A-F0-9]+)(.*)/)
        {
            my @bin = unpack("C*",$2);
            printf DESTFILE @bin;
        }
    }

    close(DESTFILE);
    close(SRCFILE);
}

ParseFile($ARGV[0],$ARGV[1]);


мне не понятно, как все же аски-байты к примеру два 0x30 0x31 и на экране будет показываться "01" , то как мне реально их в бинарный(hex) вид сконвертить, чтобы в результирующем байте не 30 31 было, а был 1 байт 01 ? 

основная задача сконвертировать аски-представление чисала в захваченной группе $2 в нормальный бинарный вид , поместить это в файл ;)

Автор: EvilsInterrupt 8.5.2010, 10:30
решил так:
Код

            my $bin = pack('H*', $2);
            syswrite DESTFILE, $bin;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)