I was thinking that maybe you should create a bit to that represent a value and then OR them and then check final result.
Code:
array[16]={0,BIT0+BITE, BIT1, BIT2,BIT3,BIT4,BIT5,BIT6,BIT7,BIT8,BIT9,BITA,BITB,BITC,BITD,BIT0+BITE}; // card value zero is dummy byte
unsigned int checkstraight= array[card[0]] | array[card[1]] | array[card[2]] | array[card[3]] | array[card[4]];
if (checkstraight == 0x200F || checkstraight == 0x3E || checkstraight == 0x7C || checkstraight == 0xF8 || checkstraight == 0x1F0.....
It would be easy to find what players have the highest straight as checkstraights value will be higher with a higher top card, should ace not count as high card when it's a 1?
As you don't have card value with 1, maybe put a dummy zero in that array spot too.
And instead of comparing with every value up to 0x3E00 maybe a function that returns 1 if it find 5 countinues bits.
This bit-pattern test should also be usefully with other hands recognitions.