CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Convert from hex to int

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
pavelustinov



Joined: 09 Mar 2013
Posts: 20

View user's profile Send private message

Convert from hex to int
PostPosted: Fri Apr 12, 2013 6:17 am     Reply with quote

Hello everybody!
I store data "23" in EEPROM like this
Code:
write_eeprom(1, 0x32);// save 2
write_eeprom(2, 0x33);// save 3
first = read_eeprom(1);
second = read_eeprom(2);

How can I convert to int and make
first*10 + second = 23
2*10 + 3=23
Ttelmah



Joined: 11 Mar 2010
Posts: 19369

View user's profile Send private message

PostPosted: Fri Apr 12, 2013 8:42 am     Reply with quote

Start with the simple thing that the computer does not store hex. It works just in binary, which can then be represented by hex, octal, decimal etc..

So you have one cell containing the number 50, and one containing the number 51. These are the ASCII codes commonly used for the digits '2' and '3'.

Simplest way is just to subtract the offset between these values and the numbers they represent (48 - this is ASCII '0'), multiply and add.

So:
Code:

int8 val;
#define VALUE_OF(x) x-'0'

first = read_eeprom(1);
second = read_eeprom(2);

val=(VALUE_OF(first)*10)+VALUE_OF(second);


There is a generic conversion routine that can do this, but to use it, you would have to transfer the bytes into a character array, add a terminating '\0', and then call the routine. More work than just doing it manually.

Best Wishes
pavelustinov



Joined: 09 Mar 2013
Posts: 20

View user's profile Send private message

PostPosted: Fri Apr 12, 2013 2:11 pm     Reply with quote

Ttelmah wrote:
Start with the simple thing that the computer does not store hex. It works just in binary, which can then be represented by hex, octal, decimal etc..

So you have one cell containing the number 50, and one containing the number 51. These are the ASCII codes commonly used for the digits '2' and '3'.

Simplest way is just to subtract the offset between these values and the numbers they represent (48 - this is ASCII '0'), multiply and add.

So:
Code:

int8 val;
#define VALUE_OF(x) x-'0'

first = read_eeprom(1);
second = read_eeprom(2);

val=(VALUE_OF(first)*10)+VALUE_OF(second);


There is a generic conversion routine that can do this, but to use it, you would have to transfer the bytes into a character array, add a terminating '\0', and then call the routine. More work than just doing it manually.

Best Wishes


I try this
Code:
write_eeprom(1, 0x32);
write_eeprom(2, 0x30);

first = read_eeprom(1);
second = read_eeprom(2);

val=(VALUE_OF(first)*10)+VALUE_OF(second);
lcd_putc(val);

But LCD doesn't display anything. Am I use this code correctly?
Ttelmah



Joined: 11 Mar 2010
Posts: 19369

View user's profile Send private message

PostPosted: Fri Apr 12, 2013 3:07 pm     Reply with quote

No.
You now have a variable called 'val' containing the number 20. You send this to the display. The number 20, is the character ' '. A space. So you will see nothing.....

You need to get a basic C textbook and understand the difference between the textual representation of a number, and the number itself. Given the original two characters _were_ the textual representation, why not just print these?. You have taken the text, converted it into the numeric representation, to print this, you need to format it as text (read up on what printf does).
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group