Передача байтового массива в функцию - PullRequest
0 голосов
/ 06 сентября 2011

Я прошу прощения за вопрос (полностью новичок), следующая функция доступна на веб-сайте USPS для создания штрих-кодов. документация показывает это: USPS_MSB_Math_CRC11GenerateFrameCheckSequence (016907B2A24ABC16A2E5C004B1 (HEX)) = 751 (HEX)

Я пробовал много вещей (передавая шестнадцатеричные числа, помещая 0x вперед, передавая двоичные числа), но я могу получить правильный результат, как я должен передать шестнадцатеричные значения в функцию? любые идеи / предложения / исправления, пожалуйста ... большое спасибо!

/*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  GeneratorPolynomial = 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;
}

1 Ответ

4 голосов
/ 06 сентября 2011

Вы должны создать массив и затем передать его - так же, как там сказано в комментарии вверху.

Для вашего примера:

unsigned char array[] = { 0x01, 0x69, 0x07, 0xB2, 0xA2, 0x4A, 0xBC, 
                          0x16, 0xA2, 0xE5, 0xC0, 0x04, 0xB1 
                        };
unsigned short myCRC = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...