Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод кода с C++ на C#, Гуру, помогите разобраться 
:(
    Опции темы
MasterOfCode
Дата 14.4.2011, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Код

WORD signature=*(WORD*) pvData;
if(signature=='AP')
{
WORD crc=*(WORD*)((BYTE*)pvData+sizeof(WORD));
       WORD test_crc=qChecksum(
              (const char *)((BYTE*)pvData+2*sizeof(WORD)),
             pvDataSize - 2*sizeof(WORD)
       );
if(crc==test_crc)
       {
              array_data=qUncompress((BYTE*)pvData + 2*sizeof(WORD),
(int)(pvDataSize - 2*sizeof(WORD))
       );
       // array_data - тело
}

Со всякими указателями у меня проблемы с переводом.

Это сообщение отредактировал(а) MasterOfCode - 14.4.2011, 07:16


--------------------
user posted image
PM ICQ   Вверх
A5uKa
Дата 14.4.2011, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Код

using System;

public class Crc16 {
    const ushort polynomial = 0xA001;
    ushort[] table = new ushort[256];

    public ushort ComputeChecksum(byte[] bytes) {
        ushort crc = 0;
        for(int i = 0; i < bytes.Length; ++i) {
            byte index = (byte)(crc ^ bytes[i]);
            crc = (ushort)((crc >> 8) ^ table[index]);
        }
        return crc;
    }

    public byte[] ComputeChecksumBytes(byte[] bytes) {
        ushort crc = ComputeChecksum(bytes);
        return BitConverter.GetBytes(crc);
    }

    public Crc16() {
        ushort value;
        ushort temp;
        for(ushort i = 0; i < table.Length; ++i) {
            value = 0;
            temp = i;
            for(byte j = 0; j < 8; ++j) {
                if(((value ^ temp) & 0x0001) != 0) {
                    value = (ushort)((value >> 1) ^ polynomial);
                }else {
                    value >>= 1;
                }
                temp >>= 1;
            }
            table[i] = value;
        }
    }
}


это ?
PM   Вверх
neutrino
Дата 14.4.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 3
Всего: 62



Для начала можно перевести это эз-из (ну или почти) с использованием fixed() {...} и unsafe, т.е.:

Код

unsafe private void Method(ushort* pvData) {

    ushort signature=*pvData;
    if(signature == 0xABCDEF) // Convert 'AP' to hex value
    {
        ushort crc=*(ushort*)((byte*)pvData+sizeof(ushort));
        ushort test_crc=qChecksum((byte*)((byte*)pvData+2*sizeof(ushort)), pvDataSize - 2*sizeof(ushort));
        if(crc==test_crc)
        {
                  array_data=qUncompress((byte*)pvData + 2*sizeof(ushort), (int)(pvDataSize - 2*sizeof(ushort)));
                  // array_data - тело
        }
    }
}


Этот код скорее всего не компилируется, но копать нужно в эту сторону.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
MasterOfCode
Дата 15.4.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Всем спасибо.
A5uKa, да этот код.

А как этот кусок кода перевести:
Код

QByteArray qCompress    (    const uchar *    data,
        int    nbytes,
        int    compressionLevel     
    ) 
{
...
QByteArray bazip;
...        
bazip[0] = (nbytes & 0xff000000) >> 24;
bazip[1] = (nbytes & 0x00ff0000) >> 16;
bazip[2] = (nbytes & 0x0000ff00) >> 8;
bazip[3] = (nbytes & 0x000000ff);
}



--------------------
user posted image
PM ICQ   Вверх
A5uKa
Дата 16.4.2011, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Цитата(MasterOfCode @ 15.4.2011,  10:58)
А как этот кусок кода перевести:

А что он делать должен ? Я не понимаю Qt
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.