/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
CRC-CCITT
Fra : Lars K Jakobsen


Dato : 24-11-00 09:07

Hej

Er der en som har en kode til at tjekke CRC-CCITT med? (Gerne med kommentar
til koden!)

/lars



 
 
Allan Juhl Kristense~ (14-12-2000)
Kommentar
Fra : Allan Juhl Kristense~


Dato : 14-12-00 21:17



Lars K Jakobsen wrote:

> Hej
>
> Er der en som har en kode til at tjekke CRC-CCITT med? (Gerne med kommentar
> til koden!)
>
> /lars

// crc16.c - CCrc16 klasse definition, medlemsfunktioner, samt
main-testrutine.
//
//Project navn : DGT Projekt
//Filnavn : crc16.cpp
//Sted : SDU-6400
//Fag : DGT 3-4
//Dato : 01-11-2000
//Udarbejdet af: Frank Bertelsen & Martin Schønwandt
//
//Beskrivelse : Besvarelse til opgave vedr. CRC- og Hammingkodening.
//

#include <stdio.h>
#include <conio.h>
#include <process.h>


//
********************************************************************************

// CCrc16 Klasse.
//
********************************************************************************

// ***************************************************
// Klasse definition.
// ***************************************************
class CCrc16
{
public:
CCrc16();
void EnterData();
void ShowData();
unsigned short Crc16(unsigned char *, unsigned int);
private:
void EmptyBuffer();

int m_nPos;
unsigned char m_nBinaryArray[80];

int m_nByteValue;
unsigned int m_nPolynomial;
};


// ***************************************************
// Konstruktør.
// ***************************************************
CCrc16::CCrc16()
{
// CRC-CCITT Polynomial: X^16 + X^12 + X^2 + 1.
// m_nPolynomial = 0x00011005; //CRC-CCITT

// CRC-16 Polynomial: X^16 + X^15 + X^2 + 1.
m_nPolynomial = 0x00018005; //CRC-16

EmptyBuffer();
}


// ***************************************************
// Tøm buffer.
// ***************************************************
void CCrc16::EmptyBuffer()
{
// Nulstil member-variabler.
m_nPos = 0;
m_nByteValue = 128;

// Tøm buffer.
for(int i = 0 ; i < 80 ; i++) {
m_nBinaryArray[i] = 0;
}
}



// ***************************************************
// Indtastningsrutine (delopgave - 4).
// ***************************************************
void CCrc16::EnterData()
{
// Kontroller om Buffer fuld.
if(m_nPos < 80) {

int nKey = 0;
int i = 0;
bool bKeyOk = false;

// Vent på tastetryk.
nKey = _getch();

switch(nKey) {

// '0' - Indtastet 0.
case 0x30:
printf("0");
bKeyOk = true;
break;

// '1' - Indtastet 1.
case 0x31:
printf("1");
m_nBinaryArray[m_nPos] = m_nBinaryArray[m_nPos] + m_nByteValue;
bKeyOk = true;
break;

// ESC - Afslut.
case 0x1B:
EmptyBuffer();
break;

// SPACE - Vis indtastede værdi.
case 0x20:
ShowData();
break;

// Enter - Beregn CRC16 og tøm buffer.
case 0x0D:
printf("\nCRC-16: 0x%04x", Crc16(m_nBinaryArray, m_nPos));
break;

// 'Q' / 'q' - Afslut.
case 0x51:
case 0x71:
exit(0);
break;
}

// Beregn værdi til næste bit.
if(bKeyOk) {
if(m_nByteValue == 1) {
m_nByteValue = 128;
m_nPos++;
}
else {
m_nByteValue = m_nByteValue / 2;
}
}
}
else {
printf("\nBuffer Fuld!");
}
}


// ***************************************************
// Udskrivningsrutine (delopgave - 5).
// ***************************************************
void CCrc16::ShowData()
{
unsigned char nBit = 0x00;
unsigned char nBinary = 0x00;
int j;

printf("\nBuffer: ");
for(int i = 0 ; i < m_nPos ; i++) {
nBinary = m_nBinaryArray[i];

for(j = 0 ; j < 8 ; j++) {
nBit = nBinary & 0x80;
if(nBit == 0x00) {
printf("0");
}
else {
printf("1");
}
nBinary = nBinary << 1;
}
printf(" ");
}
printf("\n");
}


// ***************************************************
// CRC-16 beregningsfunktion.
// ***************************************************
unsigned short CCrc16::Crc16(unsigned char *nBufferPtr, unsigned int nSize)
{
unsigned short nRemainder = 0x0000;

for( unsigned int i = 0 ; i < nSize ; ++i ) {

// Sæt Rest

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste