From 855f2eb8c463e1be80a39bf9c3bcc75cd4ec1f4f Mon Sep 17 00:00:00 2001 From: Victor Perszel <vlp14@inf.ufpr.br> Date: Sun, 29 Nov 2015 22:28:25 -0200 Subject: [PATCH] funcao de checagem de paridade --- include/submessages.h | 6 ++++-- src/submessages.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/include/submessages.h b/include/submessages.h index 2daee9c..be1cd5a 100644 --- a/include/submessages.h +++ b/include/submessages.h @@ -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 }; diff --git a/src/submessages.cpp b/src/submessages.cpp index 05d70f6..6489dcc 100644 --- a/src/submessages.cpp +++ b/src/submessages.cpp @@ -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; + } +} -- GitLab