Autor Beitrag
djfresh
Hält's aus hier
Beiträge: 9

Win XP SP3, Win Vista Business, Win 7 Professional
C# (VS2010 Prof.)
BeitragVerfasst: Do 04.11.10 09:47 
Hallo,

stehe da vor einem kniffligen Problem;-)
kann jemand folgenden Code von C in C# übersetzen?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
static short Crc16Table[256];
void InitCrc16()
{
short i, j, crc;
for(i=0; i < 256; i++)
{
crc = (i << 8); /* Put i into MSB */
for(j=0; j < 8; j++) /* Do 8 reductions */
{
crc = (crc << 1) ^((crc & 0x8000)? 0x1021:0);
}
Crc16Table[i] = crc & 0xFFFF;
}
}
//------------------------------------------------
unsigned short Crc16(unsigned char *addr, int len)
{
unsigned short crc = 0;
int i;
for (i = 0; i < len; i++, addr++)
{
crc = Crc16Table[((crc >> 8) & 255)] ^ (crc << 8) ^
(*addr & 0xFF);
crc &= 0xFFFF;
}
return crc;
}
djfresh Threadstarter
Hält's aus hier
Beiträge: 9

Win XP SP3, Win Vista Business, Win 7 Professional
C# (VS2010 Prof.)
BeitragVerfasst: Do 04.11.10 10:49 
also die erste Methode habe ich folgendermassen übersetzt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
        static uint[] Crc16Table = new uint[256];
        public void InitCrc16()
        {
            uint i, j, crc;
            for (i=0; i<256; i++)
            {
                crc = (i << 8);
                for (j = 0; j < 8; j++)
                {
                    if(crc & 0x8000)
                    {
                        crc= (crc<<1) ^ 0x1021;
                    }
                    else
                    {
                        crc = (crc << 1) ^ 0;
                    }
                }
            }
        }


Bekomme aber noch folgende Fehlermeldung bei:
crc & 0x8000
=>Eine implizite Konvertierung vom Typ "uint" in "bool" ist nicht möglich.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 04.11.10 13:15 
C macht automatisch eine Konvertierung nach bool, in C# mußt du explizit einen Vergleich durchführen:
ausblenden C#-Quelltext
1:
if((crc & 0x8000) > 0)