0 / 0 / 0
Регистрация: 07.01.2016
Сообщений: 11
1

Преобразование типов

06.04.2017, 13:44. Показов 2474. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Переношу код из сишной реализации в проект на C#. Есть функция подсчета CRC, при ее переносе компилятор выдает ошибки.

C++
1
2
3
4
5
6
7
8
9
ushort Crc16(uint8_t * pcBlock, ushort len)
{
    ushort crc = 0xFFFF;
 
    while (len--)
        crc = (crc << 8) ^ Crc16Table[(crc >> 8) ^ *pcBlock++];
 
    return crc;
}

Указатель pcBlock - это указатель на массив с данными, для которых высчитывается CRC. Если правильно понимаю, то это можно заменить на byte[] pcBlock. Также компилятору не нравится while (len--) - неявное преобразование в bool. В принципе, как это обойти вроде придумал, а вот что делать crc = (crc << 8) ^ Crc16Table[(crc >> 8) ^ *pcBlock++]; - не понимаю Ругается на неявное преобразование int в ushort.

Подскажите, как правильно переписать реализацию.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 13:44
Ответы с готовыми решениями:

Преобразование типов
Код: using System; using System.Text; public class Program { public static void...

Преобразование типов
подскажите как преобразовать правильно значение стринг в булеан мой пример: namespace...

Преобразование типов
Всем привет, не получается преобразовать начальное значение т.е. инициализация переменной класса....

Преобразование типов
Есть метод, который принимает на вход переменную типа IEnumerable&lt;DataRow&gt;; у меня есть...

4
Эксперт .NET
6432 / 4035 / 1597
Регистрация: 09.05.2015
Сообщений: 9,455
06.04.2017, 13:49 2
Не уверен, но думаю должно работать
C#
1
2
3
4
5
6
7
8
9
10
11
12
        static ushort Crc16(byte[] pcBlock)
        {
            ushort crc = 0xFFFF;
 
            for (int i = 0; i < pcBlock.Length; i++)
            {
                int index = (crc >> 8) ^ pcBlock[i];
                crc = (ushort)((crc << 8) ^ Crc16Table[index]);
            }
 
            return crc;
        }
1
0 / 0 / 0
Регистрация: 07.01.2016
Сообщений: 11
06.04.2017, 13:55  [ТС] 3
Не помогло

Ошибка CS0266 Не удается неявно преобразовать тип "int" в "ushort". Существует явное преобразование (возможно, пропущено приведение типов)
0
Эксперт .NET
6432 / 4035 / 1597
Регистрация: 09.05.2015
Сообщений: 9,455
06.04.2017, 14:21 4
Цитата Сообщение от charkin Посмотреть сообщение
Не помогло
У меня все компилируется, в какой строке ошибка?
0
0 / 0 / 0
Регистрация: 07.01.2016
Сообщений: 11
06.04.2017, 14:28  [ТС] 5
Ошибка там же - crc = (crc << 8) ^ Crc16Table[(crc >> 8) ^ pcBlock[r]];

Я скопировал строку до того, как вы отредактировали свой пост Сейчас проверю, останется ли ошибка у меня.

З.Ы.
Пробовал разные варианты, вот с таким приведением ошибки нет : crc = (ushort)((crc << 8) ^ Crc16Table[(crc >> 8) ^ pcBlock[r]]);, но не уверен, что это правильно - надо проверять.

Спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2017, 14:28
Помогаю со студенческими работами здесь

Преобразование типов
нужна помощь с преобразованием типа. Из текстового поля в которое предполагается введение 13...

Преобразование типов
Почему компилятор такое выражение допускает: byte b = 10; b *= b; А вот такое нет: byte b...

Преобразование типов
Что-то совсем в тупик зашла.Как здесь явно преобразовать? public SortedDictionary&lt;char, double&gt;...

Преобразование типов
Подскажите как в c# с массивом int можно поработать как с массивом byte; Как в с++, например, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru