Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10125[/thread]

Rechnen mit Hex

Leser: 1


<< >> 3 Einträge, 1 Seite
Gast Gast
 2007-08-18 18:14
#98366 #98366
Hallo zusammen,

Bei dieser Zeile Code:
Code (perl): (dl )
$mul = $all_hex[1]*$all_hex[0];

habe ich folgendes Problem: Im Array 'all_hex' befinden sich schon alle Hex-Eintragungen, die ich nun multiplizieren möchte, und in der Variable 'mul' speichern.

Nur, Perl behandelt die Eintragungen im Array beim Rechnen als Dezimal-Werte, und nicht als Hex-Werte! Beim printen zeigt er die korrekten Werte im Array an, nur das Rechnen klappt nicht.

Hätte jemand eine Lösung für mich? Also, dass Perl weiss, dass er jetzt mit Hex-Werten rechnen soll... Vielen Dank!
Daxim
 2007-08-19 12:03
#98375 #98375
User since
2007-08-01
114 Artikel
BenutzerIn
[Homepage]
user image
Code (perl): (dl )
1
2
3
4
5
my @all_hex = qw(A1B2 C3D4);
my $mul = hex($all_hex[0]) * hex($all_hex[1]);
print "dez: $mul\n";
$mul = sprintf '%x', $mul;
print "hex: $mul\n";
Ronnie
 2007-08-19 13:13
#98377 #98377
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Du könntest aus eine eigene Klasse für Hex-Zahlen definieren:
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
46
47
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

package HexNumber;

use Moose;
use overload    '+'     => \&add,
                '""'    => \&to_s;

has '_value'     =>  ( is => 'rw' );

sub set {
    my $self = shift;
    my $val = shift;
    return unless $val =~ /^[\da-fA-F]+$/;
    $self->_value(hex($val));
}

sub add {
    my $self = shift;
    my $other = shift;
    return (blessed $other) ?
        HexNumber->new(_value => $other->_value + $self->_value) :
        HexNumber->new(_value => $other + $self->_value) ;
}

sub to_s {
    my $self = shift;
    return sprintf '%x', $self->_value;
}

package main;

sub to ($) { shift } # just syntactic sugar

my $foo = HexNumber->new(_value => '44800'); # only dec-values directly
my $bar = HexNumber->new();

set $bar to 'fe'; # the same as $bar->set('fe');

my $buz = $foo + $bar;
print $buz, "\n" x 2;
print Dumper \$buz;
<< >> 3 Einträge, 1 Seite



View all threads created 2007-08-18 18:14.