Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C# две ошибки в программе.

19K
09 апреля 2010 года
WantToProg
63 / / 19.01.2009
Доброе время суток. Подскажите пожалуйста как избавиться от ошибок в следующей программе:
Код:
static unsafe ushort FecDecoder(ushort arg)
        {            
            ushort res, sft;            
           
            res = 0;
            sft = arg;
            for (int i = 0; i < 8; i++)
            {
                [COLOR="Red"]if (sft & 1)[/COLOR] //Cannot implicitly convert type 'int' to 'bool'
                {
                    res ^= CMatrix;
                }
                sft >>= 1;
            }

            res ^= sft;
            res = ucSyndromes[res];
            if (res == 0xff)
            {
                arg = 0x8000;
            }
            else
            {
                [COLOR="Red"]arg = (arg ^ res) & 0x00ff;[/COLOR] //Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)
            }
            return arg;
        }


Заранее благодарен
PS: Я переношу на c# код написаный на С. Наткнулся на ошибку и не знаю как решить ее :(
CMatrix - ushort[8]
ucSyndromes - byte[256]
253
09 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
 
Код:
[COLOR="Red"]if (sft & 1)[/COLOR] //Cannot implicitly convert type 'int' to 'bool'
=> if (sft % 2)
                [COLOR="Red"]arg = (arg ^ res) & 0x00ff;[/COLOR] //Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)
=> arg = (ushort)...
19K
09 апреля 2010 года
WantToProg
63 / / 19.01.2009
Или я вас не понял или не работает. Ничего не изменилось, ошибки все те же :(
8.2K
09 апреля 2010 года
bagie2
299 / / 26.10.2008
может вместо
Цитата:
(sft & 1)

написать

Цитата:
((sft & 1) != 0)


и вместо

Цитата:
arg = (arg ^ res) & 0x00ff;


Цитата:
arg = (byte)(arg ^ res);

5
09 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bagie2
может вместо написать
и вместо


Верно. И еще в блок unchecked заключить.

Код:
static ushort FecDecoder(ushort arg) {
    unchecked {
        ushort res = 0;
        ushort sft = arg;

        for (int i = 0; i < 8; i++) {
            if ((sft & 1) != 0) {
                res ^= CMatrix;
            }
            sft >>= 1;
        }

        res ^= sft;
        res = ucSyndromes[res];
        if (res == 0xff) {
            arg = 0x8000;
        } else {
            arg = (byte)(arg ^ res);
        }
        return arg;
    }
}


Кстати, а причем тут unsafe?
8.2K
09 апреля 2010 года
bagie2
299 / / 26.10.2008
а кстати почему у меня и без unchecked нет переполнения. тут просто отбрасывает ненужные биты. что-то типа типа movzx dx,al
5
09 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bagie2
а кстати почему у меня и без unchecked нет переполнения


В C# по умолчанию проверка переполнения отключена, но код таков, что при ее включении такие проверки могут поломать алгоритм.

19K
09 апреля 2010 года
WantToProg
63 / / 19.01.2009
Дело в том, что вот исходник на С:
Код:
unsigned short FecDecoder (unsigned short arg)
{
int i;
unsigned short res, sft;
res = 0;
sft = arg;

for (i = 0; i < 8; i++)
{
   if (sft & 1)
   {
     res ^= CMatrix;
   }

   sft >>= 1;
}    // end of for(i)

res ^= sft;
res = ucSyndromes[res];
if (res == 0xff)
{
   arg = 0x8000;
}
else
{
   arg = (arg ^ res) & 0x00ff;
}
return arg;
}    // end of FecDecoder()
// end of file

И не понимаю, что означает в условии (sft & 1). Кроме того, код на С, поэтму и решил unsafe.
И почему arg = (byte)(arg ^ res);?
8.2K
09 апреля 2010 года
bagie2
299 / / 26.10.2008
hardcase
спс за пояснение

Цитата:
не понимаю, что означает в условии (sft & 1)


проверка на четность

Цитата:
почему arg = (byte)(arg ^ res);


потому что :) это обнулит старшие биты

19K
10 апреля 2010 года
WantToProg
63 / / 19.01.2009
Благодарю, вроде заработало как надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог