C array of characters

I have attached the code below, and don't understand what this line of code means:

error_bit = error_bit + (current_parity ^ (hamming [hamming_length-i ] - '0' )) * i;

Specifically, I don't understand what it means to subtract the '0' in the check_hamming_code function.

By the way, the user specifies:
hamming_length = 7
parity_type = 0
hamming = 1000110

 
void params() {
	printf("Enter the length of the Hamming code: ");
	scanf("%d", &hamming_length);
	printf("Enter the parity (o=even, 1=odd): ");
	scanf("%d", &parity_type);

	hamming = (char *) malloc (hamming_length * sizeof(char));

	return;
}

/* Option #2 */

void check_hamming_code() {
	/* declare local var's */
	
	int i,j,k;

	/* prompt for hamming code string */
	printf("Enter the Hamming code: ");
	scanf("%s",hamming);

	for(i=1; i < hamming_length; i*=2) {
		/* init. something in i */
		int current_parity = parity_type;

		for(j=i; j <= hamming_length; j+=2*i) {
			/* init. something in j */

			for(k=j; (k <= hamming_length) && (k < i+j); k++) {
				
				if(k != i) 
					current_parity = current_parity ^ hamming[hamming_length-k];
			} /* end of k loop */
		} /* end of j loop */
		error_bit = error_bit + (current_parity ^ (hamming[hamming_length-i]-'0'))*i;
	} /* end i loop */

	/* correct error bit */

	printf("%d",error_bit);

	return;
}

Open in new window

InfoTechEEAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

daohailamCommented:
"hammning" is a string of digit characters ('0' - '9'). By subtracting hamming[ i ] by '0', the code converts a character i-th in hamming string to a number.
0
jkrCommented:
>>Specifically, I don't understand what it means to subtract the '0' in the
>>check_hamming_code function.

The user input is given is ASCII (http://en.wikipedia.org/wiki/ASCII) and placed in a char array. Subtracting the ASCII value of '0' as done in the line in question converts the character at 'hamming[hamming_length-i]' to its numerical equivalent, e.g. if the character entered was '3' (ASCII 51), subtracting '0' (ASCII 48) results in the value '3'.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
InfoTechEEAuthor Commented:
How so? Does '0' hold a special value or something?
0
Introduction to Web Design

Develop a strong foundation and understanding of web design by learning HTML, CSS, and additional tools to help you develop your own website.

InfoTechEEAuthor Commented:
jkr: sorry you answered my question before I asked it.
0
edsontCommented:
The scanf("%s", hamming) function execution will fill the hamming array with a string value, for instance, "1000110", which will be stored as 0x31 0x30 0x30 0x30 0x31 0x31 0x30 in the memory.

Each 0x31's and 0x30's should represent a bit, but they are actually ASCII characters. In order to execute a bit operation, it is needed to convert each of them to bits, and it is done by subtracting '0' in the function. The '0' character value is 0x30.
0
InfoTechEEAuthor Commented:
Just a follow up question, the reason why i'm going through this code is because the results are suppose to look like this:

Enter the Hamming Code: 1000110
There is an error in bit: 6 (error_bit)
The corrected Hamming code is: 1100110

My results show error_bit = 342

Can anyone see why?
0
jkrCommented:
Try to initialize 'error_bit' with '0' at the beginning of 'check_hamming_code()'. It could have any arbitrary value when that function is called and line 36 in your above snipped just adds to this variable.
0
InfoTechEEAuthor Commented:
It's a Global Variable initialized to 0. It is an INT.

Here is the part right above the code I attached at the begginning of this post:

#include <stdio.h>
#include <stdlib.h>
/* declare global var's */

int hamming_length=0, parity_type=-1, error_bit=0;

/* declare & initialize hamming string */

char *hamming = NULL;

/* Option #1 */
0
jkrCommented:
Could you post the complete code?
0
InfoTechEEAuthor Commented:
Found the problem...same as my original question.


Line 36 had subtracted the '0', but line 33 did not.

Thanks everyone for your help. I might be back here soon, but for now closing this.
0
InfoTechEEAuthor Commented:
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.