Thread Integer auf 2 Bytes aufteilen (12 answers)
Opened by willi at 2010-02-13 01:28

Linuxer
 2010-02-13 01:54
#132855 #132855
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

auch wenn ich noch nicht erkannt habe, wofür man sowas tun sollte, hier mal ein Lösungsvorschlag:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/perl

use strict;
use warnings;

# siehe Perl Kochbuch
sub dec2bin {
    my $str = unpack("B32", pack("N", shift));
    $str =~ s/^0+(?=\d)//;  # remove leading zeros
    return $str;
}

# siehe Perl Kochbuch
sub bin2dec {
    return unpack( "N", pack( "B32", substr("0" x 32 . shift, -32 ) ));
}

sub foo {
    my $i = shift;

    # integer in binaer wandeln; Reihenfolge der Bits im String umkehren
    my $bitstring = reverse dec2bin($i);
    
    # damit jeweils 8 Bit vom Ende genommen werden, wurde die Bitfolge
    # umgekehrt, damit der Regex jeweils 8 Bit vom Anfang nehmen kann.
    # Sollten weniger als 8 Bit übrig bleiben, wird dieses Teilstueck
    # auch genommen.
    my @parts = $bitstring =~ m/(..{1,7})/g;

    # jeden Teilstring nun wieder umkehren und in Dezimal wandeln
    # dabei auch die Reihenfolge der Teile wieder umkehren
    @parts = reverse map { bin2dec(scalar reverse $_) } @parts;

    # Ergebnisliste liefern
    return @parts;
}

{
    # perldoc -f local; perldoc perlvar
    local $,=$/;

    # gebe Ergebnis aus
    print foo( 4436 );

}


edit: Code nicht exzessiv getestet.
Last edited: 2010-02-13 01:59:33 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Integer auf 2 Bytes aufteilen