Subject: Re: subtract two char value? From: Scott Klement Date: Fri, 09 Nov 2007 15:23:44 -0600 List-archive: List-help: List-id: C programming iSeries / AS400 List-post: List-subscribe: , List-unsubscribe: ,

In C, a 'char' field is the same as RPG's 3I 0 (or 3U 0 if you're using unsigned characters). It's an 8-bit binary integer. When you put a character in single quotes, it looks up the EBCDIC value of that character, and puts that number into the variable.

'char' variables in C are numeric variables.

so if you had the following C code:

char c;
c = '1';

On an EBCDIC system, that would've put the value 241 into the variable named 'c'. (or x'F1'... if you look at an EBCDIC chart, you'll see that the number 1 is x'F1' in EBCDIC).

The Hex2Int() routine that you're using is intended to convert a hex character, from 0-9, or A-F into a number. So characters from 0-9 should come back with a numeric value of 0-9, and characters from A-F should come back with a number from 10-15. I think you can see how the 10-15 part works.

So if you take '1' - '0', what do you get? x'F1', or 241 minus x'F0' or 240. 241-240=1... the number one. likewise, 9 is 249, and 249-249=9.

Lim Hock-Chai wrote:
I ran into code below and confuse about the line where it subtract two
char fields:
unsigned int Hex2Int(char cC) { switch(cC) { case 'a':return(10);break; case 'b':return(11);break; case 'c':return(12);break; case 'd':return(13);break; case 'e':return(14);break; case 'f':return(15);break; case 'A':return(10);break; case 'B':return(11);break; case 'C':return(12);break; case 'D':return(13);break; case 'E':return(14);break; case 'F':return(15);break; default:return(cC-'0');break; <== What is this mean? How can C
subtract two char values?
} return(0); }

I wrote a test program below and the result of 'H'-'0' is 'Q'. Huh?
int main(void) { char cC; char result; cC = 'H'; result = cC-'0';
}