in reply to Regarding Convert::ASN1 ?

Dhiraj:

If you knew that your problem was that you needed to convert your data to a string of hex digits, why add the wild goose chase with Convert::ASN1?

Anyway, you can convert to hex pretty easily using perldoc -f unpack. You would have easily found the answer had you done a simple search using something like "perl convert to hex" in Google or just about *any* search engine.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: Regarding Convert::ASN1 ?
by dhiraj4mann (Initiate) on Jul 23, 2012 at 16:31 UTC
    Hi Roboticus, As the data which is being read in ASN BER encoded so I need to use Convert::ASN1 to decode it. This module uses Dumper to dump the decoded data structure in format like:
    $VAR1 = { "diameterCreditControlRecord" => { "dAFirstValueAfter" => "+1920.57", "originHost" => "aaa://lg-2;transport=tcp", "originRealm" => "lg.gom", "recordSequenceNumber" => "\1", "finalCharge" => "+110.43", "dAFirstID" => 10, "callingPartyNumber" => "\241\b\30dB\205", "accumulatorValue4" => 0, "accumulatorDeltaValue" => 11043, "subscriberID" => "\241\b\30dB\205", "serviceProviderID" => 1, "trafficCase" => 20, "dAFirstValueBefore" => "+2031.00", "accumulatorID" => 5, "accumulatorValue2" => 0, "serviceOfferings" => 4259872, "accumulatorValue1" => 68, "dAFirstAccDuration" => 11043, "originatingLocationInfo" => "\221&!\360", "lastPartialOutput" => 1, "accountValueBefore" => "+48.22", "extText" => "inter", "chargedDuration" => "+#", "cdrType" => 0, "teleServiceCode" => 6, "dataVolume" => "\254\210h", "serviceClass" => 603, "triggerTime" => "!p\1qE!0\20\0", "extInt1" => 1, "nodeID" => "LGLLL", "numberOfSDPInterrogations" => 269, "accumulatorValue5" => 56795, "accountValueAfter" => "+0.02", "accumulatorValue3" => 0, "localSequenceNumber" => "\25\347qZ", "currencyType" => 0 }
    Requirement is to have output in above format but print the fields which contain non printable characters like "localSequenceNumber" in hex format and rest of the fields in format already displayed above. Regards, Dhiraj

      dhiraj4mann:

      Then all you need to do is update your data after reading it:

      #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $VAR = { "diameterCreditControlRecord" => { "dAFirstValueAfter" => "+1920.57", "originHost" => "aaa://lg-2;transport=tcp", ..... snip ..... "callingPartyNumber" => "\241\b\30dB\205", "accumulatorValue4" => 0, "accumulatorDeltaValue" => 11043, "subscriberID" => "\241\b\30dB\205", ..... snip ..... } }; my $t = $$VAR{diameterCreditControlRecord}; # Now just convert each field you care about into a hex string: $$t{$_} = tohex($$t{$_}) for (qw( callingPartyNumber subscriberID )); print Dumper($VAR); sub tohex { ..... }

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.

        Thanks a lot. It worked .... Dhiraj