Okay, I am working on a card playing program, and I am storing card values as hexadecimal digits. Here is the array:
public int[] originalCards = new int[54]
{
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,
0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D,
0x50, 0x51
};
The first digit refers to the suit (1 = spades; 2 = clubs; …. 5 = Jokers)
The second digit is the number of the card (1 = ace, 5 = 5; 13 = K, etc).
I would like to do something like the following:
Pseudocode:
public int ReturnCard(int num)
{
int card = currentDeck[num];
int suit = card.firsthexdigit;
int value = card.secondhexdigit;
return 0;
}
I don’t need a new method to work on ints, I just included it for clarity’s sake.
Anybody know how to do this in C#?
Edit: Okay, I am using bit shifting as described in one of the answers. I can get the second digit (the suit) just fine, but the first digit keeps coming out as ‘0’. Any idea why?
Edit:edit: okay, works fine now. Thanks guys.
Here’s an answer using bit fields.
You may need to add in int for padding as either the first or last field to line the bits up properly. Bit fields are normally used to access hardware because hardware registers frequently pack multiple flags into a single byte.
By the way if you use the bit shift, you want to shift by the number of bits in a hexadecimal digit. One hex digit holds values 0 – 15 or 0 – F, this requires 4 bits not 8. So this should be used: