in reply to Re: How to convert bigint to bytearray in perl
in thread How to convert bigint to bytearray in perl

That's not equivalent. It fails for negative numbers, as well as positive numbers that requires a multiple of 8 bits to represent (e.g. 128-255, and 32678-65535).

The following addresses the second of the above limitations:

sub bigint_to_bytearray { my $bigint = shift; die "Negative numbers not supported" if $bigint < 0; my @bytes = unpack('c*', $bigint->to_bytes); unshift @bytes, 0x00 if $bytes[0] < 0; # Add sign bit if necessary return @bytes; }

The above requires a relatively new version of Math::BigInt. The following is less efficient, but it works on far older versions:

sub bigint_to_bytearray { my $bigint = shift; die "Negative numbers not supported" if $bigint < 0; my @bytes = unpack('c*', pack('H*', substr($bigint->as_hex, 2))); unshift @bytes, 0x00 if $bytes[0] < 0; # Add sign bit if necessary return @bytes; }

Replies are listed 'Best First'.
Re^3: How to convert bigint to bytearray in perl
by tajinderpalsingh61 (Initiate) on Aug 26, 2019 at 09:03 UTC
    Thanks, You saved my day, How can I accept your answer?