Even parity Hamming code
Example-1:
Input: 10111010100101
Output:
Mod data: 1111011110101000101
Number of parity bits: 5
Example-2:
Input: 101100
Output:
Mod data: 0110011000
Number of parity bits: 4
Before add parity bit, data will generate like this: 0X1X011X1010100X101
P1
= [3, 5, 7, 9, 11, 13, 15, 17, 19] = 101111011
= X1 = 1 {Odd parity}
P2
= [3, 6, 7, 10, 11, 14, 15, 18, 19] = 111010001
= X2 = 1 {Odd parity}
P4
= [5, 6, 7, 12, 13, 14, 15] = 0110100
= X4 = 1 {Odd parity}
P8
= [9, 10, 11, 12, 13, 14, 15] = 1010100
= X8 = 1 {Odd parity}
P16
= [17, 18, 19] = 101
= X16 = 0 {Even parity}
So, Modified data = 1111011110101000101
Sample Output
Enter data: 101100
Mod data: 0110011000
Number of parity bits: 4
Source Code
#include<stdio.h>
#include<math.h>
void main()
{
int i, j, k, l, m, n, x, p_bit[50], p_bit_count = -1;
int count, dataLen, value = 0, temp_even_parity_len;
char data[500], temp_data[500], modData[500], temp_even_parity[100];
printf("Enter data: ");
scanf("%s", data);
for(i = 0; data[i] != '\0'; i++);
dataLen = i;
for(i = 0; value <= (dataLen + i + 1); i++)
{
value = pow(2, i);
p_bit[i] = value;
p_bit_count++;
}
i = 0;
j = 0;
k = 0;
while(i < (dataLen + p_bit_count))
{
if(p_bit[k] == i+1)
{
modData[i] = 'X';
k++;
}
else
{
modData[i] = data[j];
j++;
}
i++;
}
modData[i] = '\0';
for(k = 0; k < p_bit_count; k++)
{
l = 0;
for(m = p_bit[k]; m <= dataLen + p_bit_count;)
{
for(n = 0; n < p_bit[k] && m <= dataLen + p_bit_count; n++)
{
if(m == p_bit[k])
{
m++;
}
else
{
temp_even_parity[l++] = modData[m-1];
m++;
}
}
for(n = 0; n < p_bit[k] && m <= dataLen + p_bit_count; n++)
{
m++;
}
}
temp_even_parity[l] ='\0';
for(i = 0; temp_even_parity[i] !='\0'; i++);
temp_even_parity_len = i;
for(i = 0, count = 0; i < temp_even_parity_len; i++)
{
if(temp_even_parity[i] == '1')
{
count++;
}
}
if(count % 2 == 0)
{
x = (p_bit[k]-1);
modData[x] = '0';
}
else
{
x = (p_bit[k]-1);
modData[x] = '1';
}
}
printf("\nMod data: %s\n", modData);
printf("Number of parity bits: %d\n\n", p_bit_count);
}
Sample Output
Enter data: 10111010100101
Mod data: 1111011110101000101
Number of parity bits: 5