2011-09-06 135 views
0

对于这个问题(完全新手),我很抱歉,USPS网站提供以下函数用于生成条形码。文档显示此: USPS_MSB_Math_CRC11GenerateFrameCheckSequence(016907B2A24ABC16A2E5C004B1(HEX))= 751(HEX)将字节数组传递给函数

我试过很多事情(经过十六进制数,前面puting 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; 
} 

回答

4

你应该创建一个数组,然后传入 - 就像顶部的注释那样。

对于示例:

unsigned char array[] = { 0x01, 0x69, 0x07, 0xB2, 0xA2, 0x4A, 0xBC, 
          0x16, 0xA2, 0xE5, 0xC0, 0x04, 0xB1 
         }; 
unsigned short myCRC = USPS_MSB_Math_CRC11GenerateFrameCheckSequence(array);