Represent a 5 card poker hand
If we have a set of size $n$, you can represent an element of the set using $\lceil \lg n \rceil$ bits.  You say that there are 2598960 possible 5-card hands.  That means that a 5-card hand can be represented using just $\lceil \lg 2598960 \rceil = 22$ bits.  22 bits is significantly shorter than 30 bits.

How does the representation work?  There are various options, with different tradeoffs.  I list two below.

Hard-coded dictionary

In this case, the number of possible 5-card hands is small enough that you could just have a hard-coded dictionary that lists all 2598960 hands, and you represent a hand by its index in the dictionary (represented in binary).

In other words, the dictionary can be a sorted list of hands.  Each hand is the 5-tuple of the cards in the hand, in sorted order.  You can look up a hand in the dictionary using binary search and find its corresponding index; and given an index, you can find the correspond hand.  Or, you could store the dictionary as a hashmap that maps from the hand to its index.  The index is an integer between 0 and 2598959, so it can be represented using 23 bits.

This approach will work and be very simple to program, but it is wasteful in space (size of the program executable).

Ranking/unranking

Alternatively, if you care, there are better methods.  See, e.g., any of the following references:


https://en.wikipedia.org/wiki/Combinatorial_number_system
East Side, West Side.  Lecture notes, Herbert S. Wilf, August 14, 1999.  Sections 3.7-3.8.
https://computationalcombinatorics.wordpress.com/2012/09/10/ranking-and-unranking-of-combinations-and-permutations/
https://stackoverflow.com/q/3143142/781723


The general topic is known as "ranking (and unranking) of combinations".  These are a little more complex to implement and understand, but avoid the need to include a hard-coded dictionary in the program.