Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!wuarchive!julius.cs.uiuc.edu!apple!veritas!amdcad!sun!ringworld.Eng.Sun.COM!eager From: eager@ringworld.Eng.Sun.COM (Michael J. Eager) Newsgroups: comp.lang.c Subject: Re: Summary: Converting ascii hex to pure hex values Message-ID: <144396@sun.Eng.Sun.COM> Date: 31 Oct 90 04:46:54 GMT References: <302@cti1.UUCP> Sender: news@sun.Eng.Sun.COM Distribution: comp Organization: Sun Microsystems, Mt. View, Ca. Lines: 43 In article <302@cti1.UUCP> mpledger@cti1.UUCP (Mark Pledger) writes: >I guess I did'nt make myself clear enough on my question though. I know I >can use scanf() or cast a char to int (for a single char). I DID'NT want to >use scanf() and casting does not work for my question. The original question >went something like this: If you have a character string with the ascii >representation of hex values (e.g. s[] = "63", which will be stored as TWO >hex byte values \x9 & \x9. I only want to store them as ONE hex byte of \x63. >Without using scanf() (or even sprintf()) what is the best (fasted for me) way >to convert a two-digit ascii code to a one digit hex code, so I can put it back >into the charater string s[], append a null, and write it back out to disk. I >currently use atoi() and just write out the int to disk. I am interested in >creating (or finding) a routine that will take a character string as the >argument, and returning the hex result in the same character string. Well, I have to agree that the previous posting wasn't clear; but I'm not sure this one makes anything more clear. If you want to convert the ascii representation of a 8 bit hex value into that value, here is a simple way: (Although returning the value in the same string seems abhorrent. void atox (char *s) { char * p = s; int left, right; while (*s) { left = *s - '0'; right = *(s+1) - '0'; /* Better hope they come in pairs */ if (left > 9) left = toupper(left + '0') - 'A' + 10; if (right > 9) right = toupper(right + '0') - 'A' + 10; *p = (left << 4) + right; p++; s += 2; } } Note that you need to know how many characters you are passing to this function so you will know how many bytes are returned. -- Mike Eager