Passing a byte array to a function
I apologize for the question(completely newbie), the following function is available in the USPS website for generating barcodes. the documentation shows this: USPS_MSB_Math_CRC11GenerateFrameCheckSequence(016907B2A24ABC16A2E5C004B1(HEX)) = 751(HEX)
I've tried many things(passing the hexadecimals, puting 0x in front, passing binary) but I can get the correct result, how am I suppossed to pass the hexadecimal values to the function? any ideas/suggestions/corrections please... thank you very very much!
/*Inputs: ByteArrayPtr is the address of a 13 byte array holding 102 bits which
are right justified - ie: the leftmost 2 bits of the first byte do not
hold data and must be set to zero.
Outputs: Outputs:return unsigned short - 11 bit Frame Check Sequence (right justified)
*/
extern unsigned short
USPS_MSB_Math_CRC11GenerateFrameCheckSequence( unsigned char *ByteArrayPtr )
{
unsigned short GeneratorPolynomi开发者_如何学Pythonal = 0x0F35;
unsigned short FrameCheckSequence = 0x07FF;
unsigned short Data;
int ByteIndex,Bit;
/* Do most significant byte skipping the 2 most significant bits */
Data = *ByteArrayPtr << 5;
ByteArrayPtr++;
for ( Bit = 2; Bit < 8; Bit++ ) {
if ( (FrameCheckSequence ^ Data) & 0x400 )
FrameCheckSequence = (FrameCheckSequence << 1) ^ GeneratorPolynomial;
else
FrameCheckSequence = (FrameCheckSequence << 1);
FrameCheckSequence &= 0x7FF;
Data <<= 1;
}
/* Do rest of the bytes */
for ( ByteIndex = 1; ByteIndex < 13; ByteIndex++ ) {
Data = *ByteArrayPtr << 3;
ByteArrayPtr++;
for ( Bit = 0; Bit < 8; Bit++ ) {
if ( (FrameCheckSequence ^ Data) & 0x0400 )
FrameCheckSequence = (FrameCheckSequence << 1) ^ GeneratorPolynomial;
else
FrameCheckSequence = (FrameCheckSequence << 1);
FrameCheckSequence &= 0x7FF;
Data <<= 1;
}
}
return FrameCheckSequence;
}
You're supposed to make an array and then pass it in - just like the comment at the top there says.
For your example:
unsigned char array[] = { 0x01, 0x69, 0x07, 0xB2, 0xA2, 0x4A, 0xBC,
0x16, 0xA2, 0xE5, 0xC0, 0x04, 0xB1
};
unsigned short myCRC = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(array);
精彩评论