in reply to Returning int64_t value from C++ to Perl

Two possibilities.

  1. Convert the I64 to a double and return it as an NV:
    double i64d ( ) { __int64 x = 123435; return (double)x; }
  2. Return the 8 bytes packed into a string and unpack them in Perl:
    SV* i64p( ) { union { __int64 i; char s[8]; } x; x.i = 123456789; return newSVpv( x.s, 8 ); } ... ## Note: The unpacking will vary with endianness of the platform. my( @i64 ) = unpack 'VV', i64p(); print $i64[ 1 ] * 2**32 + $i64[ 0 ];

Either way, if you are using a 32-bit Perl, you are going to be restricted to integers < ~2**52, so the latter method would only really be useful if you are going pass the I64 (back) to another piece of i64 capable code.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."