I’m trying to adapt this answer to arbitrary numeric values. Let’s say we have 3 (unsigned) numbers: v1, v2, v3 and we know the respective max values they may have: max1, max2, max3. max1 * max2 * max3 < 2^32, so the result (packed value) is to be within 32 bits. How to pack/unpack them without “magic” hardcoding? Answer Here