How to convert floating point values ​​to text in binary using Perl?

I have a text file:

float a[10] = {
    7.100000e+000 ,
    9.100000e+000 ,
    2.100000e+000 ,
    1.100000e+000 ,
    8.200000e+000 ,
    7.220000e+000 ,
    7.220000e+000 ,
    7.222000e+000 ,
    1.120000e+000 ,
    1.987600e+000
};

unsigned int col_ind[10] = {
    1 ,
    4 ,
    3 ,
    4 ,
    5 ,
    2 ,
    3 ,
    4 ,
    1 ,
    5
};

Now I want to convert each array (float / unsigned int) into different binaries - big endian type, binary for all float values ​​and binary for all integer values.

What is an easy way to do this in Perl, think what I have over two millionth elements in each array?

+3
source share
1 answer

You want to see binmodeand pack. Here is an example to get you started. I'm not sure I selected the package templates you need, but I will look at the documentation packfor all the options.

use strict;
use warnings;

my ($fh, $pack_template);

while (my $line = <>){
    if ( $line =~ /(float|int)/ ){
        $pack_template = $1 eq 'int' ? 'i' : 'f';

        undef $fh;
        open $fh, '>', "$1.dat" or die $!;
        binmode $fh;

        next;
    }

    next unless $line =~ /\d/;
    $line =~ s/[,\s]+$//;

    print $fh pack($pack_template, $line);
}
+3
source

Source: https://habr.com/ru/post/1746749/


All Articles