Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Performing addition on hex value extracted from a string

by mr_ron (Chaplain)
on Feb 21, 2019 at 18:45 UTC ( [id://1230319]=note: print w/replies, xml ) Need Help??


in reply to Performing addition on hex value extracted from a string

Hopefully a more complete and self contained example for haukex explanation:

#!/usr/bin/env perl use v5.10; use strict; use warnings; use Math::BigInt; use constant offset => Math::BigInt->new('0x500000000'); while (my $line1 = <DATA>) { # if addr 0x10000 written like 0x010000 then # 0x(?:[[:xdigit:]]{2})+)\b may validate memory address my ($addr) = $line1 =~ /addr:(0x[[:xdigit:]]+)\b/; # print "addr is $addr\n"; if (defined $addr) { my $new_addr = sprintf "0x%x", hex($addr) + offset; if ($line1 =~ s/ \baddr: \K $addr (?=\s+qospri:) /$new_addr/x ) { print $line1; } else { print STDERR "unchanged\n"; print $line1; } } } __DATA__ chn:req mon:orig cmd:SDP_CMD_WRSIZEDFULL tag:0x3b9aca01 addr:0xdf7780 +qospri:0 len:0xf

Update: requirement for even number of digits removed thanks to explanation from AnamalousMonk.

Ron

Replies are listed 'Best First'.
Re^2: Performing addition on hex value extracted from a string
by AnomalousMonk (Archbishop) on Feb 21, 2019 at 19:12 UTC
    my ($addr) = $line1 =~ /addr:(0x(?:[[:xdigit:]]{2})+)/;

    If the hex value really is an address as  'addr' suggests, is there any guarantee the hex digits will always be paired, i.e., always be an even number of digits? If they are not paired, won't the lack of a boundary assertion sometimes cause an incorrect value to be extracted from the string?

    c:\@Work\Perl\monks>perl -wMstrict -le "my $line1 = 'addr:0xabcde'; my ($addr) = $line1 =~ /addr:(0x(?:[[:xdigit:]]{2})+)/; print qq{'$addr'}; " '0xabcd'


    Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1230319]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2024-03-28 08:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found