Floats have a precision of 53 bits, or thereabout. 48 bits shouldn't really be a problem. You can always use int($n/2**32) and $n-2**32*int($n/2**32) to get at the higher 16, and at the lower 32 bits.
Perhaps your machine/Perl port can handle the 'Q' type for pack. That way, you can save up to 64 bit integers, so you just have to loose 16 bits - 2 bytes, from the resulting string.