Есть функция подсчета 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"
Я пытался переконвертировать, но не получилось
Ну всё верно, первый операнд тернарного оператора должен иметь тип bool
, у вас же там число, надо писать явно (crc & 0x80) != 0
Но вообще тут куча проблем. На самом деле вам необходимо разобраться как работает этот алгоритм и переписать его в безопасном стиле, без использования указателей.
вместо crc = crc & 0x80 ? (crc << 1) ^ 0x9B : crc << 1;
if(crc & 0x80){
crc = ((crc << 1) ^ 0x9B);
}else
{
crc << 1;
}
я если что в c# нуб полный, но вроде так дожно прокатить
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пишу свою RTS игру, написал класс юнита, всё работает,но натыкаюсь на такую вот проблему - вся проблема в стандартном Nav Mesh Agent, в котором естественно...
Возникла следующая проблема: У меня есть GridControl и GridViewСтолбцы в этом представлении генерируются автоматически при установке DataSource для GridControl'а
В редакторе Unity есть удобные DebugLog логи