Переделать функцию с С++ на C#

203
23 августа 2018, 21:00

Есть функция подсчета Crc8, которая написана на C++ и эту функцию мне нужно перенести на C#

Вот сама функция:

uint8_t Crc8(unsigned char *pcBlock, unsigned int len)
{
    unsigned char crc = 0xFF;
    unsigned int i;
    while (len--)
    {
        crc ^= *pcBlock++;
        for (i = 0; i < 8; i++) {
            crc = crc & 0x80 ? (crc << 1) ^ 0x9B : crc << 1;
        }
    }
    return crc;
}

Начал я писать на С# и столкнулся с проблемой:

unsafe char Crc8(char* pcBlock, uint len)
{
    ushort crc = 0xFF;
    ushort i;
    while(Convert.ToBoolean(len))
    {
        crc ^= *pcBlock;
        for (i = 0; i < 8; i++)
            crc = crc & 0x80 ? (crc << 1) ^ 0x9B : crc << 1;
    }
}

Он не понимает строку:

crc = crc & 0x80 ? (crc << 1) ^ 0x9B : crc << 1;

Пишет ошибку:

Не удается неявно преобразовать тип "int" в "bool"

Я пытался переконвертировать, но не получилось

Answer 1

Ну всё верно, первый операнд тернарного оператора должен иметь тип bool, у вас же там число, надо писать явно (crc & 0x80) != 0

Но вообще тут куча проблем. На самом деле вам необходимо разобраться как работает этот алгоритм и переписать его в безопасном стиле, без использования указателей.

Answer 2

вместо crc = crc & 0x80 ? (crc << 1) ^ 0x9B : crc << 1;

if(crc & 0x80){
crc = ((crc << 1) ^ 0x9B);
}else
{
crc << 1;
}

я если что в c# нуб полный, но вроде так дожно прокатить

READ ALSO
Перемещение юнита по клику (RTS)

Перемещение юнита по клику (RTS)

Пишу свою RTS игру, написал класс юнита, всё работает,но натыкаюсь на такую вот проблему - вся проблема в стандартном Nav Mesh Agent, в котором естественно...

195
Использование DisplayAttribute в DevExpress WF GridControl

Использование DisplayAttribute в DevExpress WF GridControl

Возникла следующая проблема: У меня есть GridControl и GridViewСтолбцы в этом представлении генерируются автоматически при установке DataSource для GridControl'а

202
Залогиниться в гугле из консоли c#

Залогиниться в гугле из консоли c#

Доброго времени суток всем!

165