Функция CRC.Преобразование C в C # - PullRequest
1 голос
/ 15 ноября 2010

Мне нужно преобразовать эти функции C в C #. Просто хотел перепроверить, правильно ли я это сделал. Спасибо!

C Код:

unsigned short Crc;

unsigned short update_crc(unsigned short crc, char c) {
    char i;

    crc ^= (unsigned short)c<<8;
    for (i=0; i<8; i++) {
        if (crc & 0x8000) crc = (crc<<1)^0x1021;
        else crc <<=1;
    }
    return crc;
}


void exampleCRC(void){

 #define INITIAL_CRC 0xffff

unsigned short Crc = INITIAL_CRC;
record_t record;

    for (byteCount=0; byteCount<sizeof(record_t); byteCount++) {
        Crc = update_crc(Crc, record[byteCount] );
    }
}

C # Код:

ushort UpdateCrc(ref ushort crc, byte b)
{
    crc ^= (ushort)(b << 8);

    for (int i = 0; i < 8; i++)
    {
        if ((crc & 0x8000) > 0)
            crc = (ushort)((crc << 1) ^ 0x1021);
        else
            crc <<= 1;
    }

    return crc;
}

ushort CalcCrc(byte[] data)
{
    ushort crc = 0xFFFF;

    for (int i = 0; i < data.Length; i++)
        crc = UpdateCrc(ref crc, data[i]);

    return crc;
}

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

Мне кажется хорошо, за исключением того, что вам действительно не нужен параметр ref для UpdateCrc, так как вы все равно возвращаете измененное значение.

0 голосов
/ 15 ноября 2010

Вы пробовали запускать тесты с различными значениями?

Также, возможно, сделайте их static функциями (если это уже не было вашим планом), так как им, кажется, не требуется доступ к каким-либосостояние объекта.

...