/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
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
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408926
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.