?
Solved

C array of characters

Posted on 2011-03-19
11
Medium Priority
?
556 Views
Last Modified: 2012-05-11
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

0
Comment
Question by:InfoTechEE
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
11 Comments
 
LVL 5

Assisted Solution

by:daohailam
daohailam earned 400 total points
ID: 35172772
"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
 
LVL 86

Accepted Solution

by:
jkr earned 1200 total points
ID: 35172777
>>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
 

Author Comment

by:InfoTechEE
ID: 35172782
How so? Does '0' hold a special value or something?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:InfoTechEE
ID: 35172784
jkr: sorry you answered my question before I asked it.
0
 

Assisted Solution

by:edsont
edsont earned 400 total points
ID: 35172789
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
 

Author Comment

by:InfoTechEE
ID: 35172792
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
 
LVL 86

Expert Comment

by:jkr
ID: 35172820
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
 

Author Comment

by:InfoTechEE
ID: 35172826
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
 
LVL 86

Expert Comment

by:jkr
ID: 35172861
Could you post the complete code?
0
 

Author Comment

by:InfoTechEE
ID: 35172874
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

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
Suggested Courses

741 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question