मेरे पास फ़ाइल है जिसमें कई दशमलव संख्याएँ फॉर्म में दी गई हैं जैसे:

Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'

अब मैंने यह कोशिश की है,

while (my $line = <$Log1>) {
    $line =~ s/'(\d+)'/(\hex(\d+))/g);    #Here I am getting error
    print $line;
    };
sub hex{
my $num = @_;
my $n= ("0x"."%x\n", $num);
return $n; 
};   

मैंने सोचा (\hex(\d+)) काम करेगा। कोई सुझाव यह कैसे करें?

3
Alexx 23 सितंबर 2020, 19:26

2 जवाब

सबसे बढ़िया उत्तर

दशमलव संख्या को हेक्साडेसिमल के रूप में प्रारूपित करने और sprintf का उपयोग कर सकते हैं https://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators" rel="nofollow noreferrer">s// e के साथ sprintf का मूल्यांकन करने के लिए :

use warnings;
use strict;

while (my $line = <DATA>) {
    $line =~ s/(\d+)/sprintf '0x%x', $1/eg;
    print $line;
}

__DATA__
Hello
Hey
'37888' =>'A'
'37890' =>'B'
'37642' =>'C'

आउटपुट:

Hello
Hey
'0x9400' =>'A'
'0x9402' =>'B'
'0x930a' =>'C'

साथ ही, पहले से ही एक अंतर्निहित hex फ़ंक्शन है, जिसका अर्थ है कि आपको अपना स्वयं का बनाने से बचना चाहिए hex नाम का फंक्शन।

5
toolic 23 सितंबर 2020, 19:52

पर्ल का hex दूसरी तरफ जाता है। यह एक स्ट्रिंग की व्याख्या करता है जैसे कि यह पहले से ही किसी संख्या का हेक्साडेसिमल प्रतिनिधित्व है।

मेरे पास त्वरित रूपांतरण के लिए कुछ शेल उपनाम हैं:

$ grep alias ~/.bash_profile | grep 2[hdob]
alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"
alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"
alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"
alias b2h="perl -e 'printf qq|%X\n|, oct( q(0b) . shift )'"
alias b2o="perl -e 'printf qq|%o\n|, oct( q(0b) . shift )'"
alias b2d="perl -e 'printf qq|%d\n|, oct( q(0b) . shift )'"
1
brian d foy 23 सितंबर 2020, 21:48