Skip to content
Snippets Groups Projects
Commit 855f2eb8 authored by Victor Perszel's avatar Victor Perszel :top:
Browse files

funcao de checagem de paridade

parent da3b4fa9
No related branches found
No related tags found
No related merge requests found
......@@ -40,7 +40,9 @@ class SubMessage{
unsigned char* getData(); //Retorna os dados
unsigned char* objToString();
unsigned char* objToString(); //Transforma o objeto submessage numa string
void stringToObj(unsigned char*);
void stringToObj(unsigned char*); //Transforma uma string num objeto submessage
int checkParity(); // É diferente de 0 caso a paridade esteja errada
};
......@@ -128,3 +128,42 @@ void SubMessage::stringToObj(unsigned char* string){
// Passagem da paridade.
parity = string[size+3];
}
int SubMessage::checkParity(){
int **bitsMessage;
int i, j, bitsParity[8];
unsigned char parityTest;
// Alocação da matriz de bits
bitsMessage = new int*[this->getSize()];
for(i = 0 ; i < this->getSize() ; i++){
bitsMessage[i] = new int[8];
// Divide os dados em bits
for(j = 0 ; j < 8 ; j++){
bitsMessage[i][j] = ((data[i] >> (7-j)) & 0x01);
}
}
// Soma os bits verticalmente
for(j = 0 ; j < 8 ; j++){
bitsParity[j] = 0;
for(i = 0 ; i < this->getSize() ; i++){
bitsParity[j] = bitsParity[j] + bitsMessage[i][j];
}
// Caso a soma vertical de uma coluna for par, bitsParity recebe 1,
// caso contrario ele recebe 0.
if((bitsParity[j] % 2) == 0){
bitsParity[j] = 1;
}else{
bitsParity[j] = 0;
}
// Atribui os bits para parity (variável de paridade do objeto)
parityTest = (parityTest << 1) | bitsParity[j];
}
if (parityTest == parity){
return 1;
}else{
return 0;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment