Link to home
Start Free TrialLog in
Avatar of zulliger
zulliger

asked on

split a float in characters

We are programming PIC16c73a with a C-Compiler (PCM). This is normal C without any special libraries.
Now we have a float (18.1235468), we have to output this number serial (I2C - Bus). We want only one number after the the point (18.1) to put this number serial, we need each numbe alone (n1 = 1; n2 = 8; n3 = 1......)
Can anybody help us???

Thank you very much!!
Avatar of ozo
ozo
Flag of United States of America image

char n[100];
#include <stdio.h>
char n1,n2,n3,n4;
sprintf(n,"%.1f",18.1235468);
n1 = n[0];
n2 = n[1];
n3 = n[2];
n4 = n[3];
Avatar of TheMadManiac
TheMadManiac

char buffer[100];
sprintf(buffer,"%.1f".float_number);

this will give you a buffer which you can send ofcourse use byte by byte :)

hope it helps
It seems ozo was earlier with the answer, so i suppose he should get the points. (sorry ozo, but i hadn't even seen your comment :)
Avatar of zulliger

ASKER

sorry, can someone tell me, how to get the points to the right person??

.. Thank you for your answers!
just reject mine, and then ask ozo to answer it, then you can grade it
(also place a comment that ozo should be the only one to post the answer)
Ozo you can now post the answer...
ASKER CERTIFIED SOLUTION
Avatar of ozo
ozo
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ozo, perhaps you're right, but this way is better than getting someone in the end telling me i stole their points :)
Ozo, your answer is wrong.  It will corrupt the stack (or other variables) with the terminating zero of the string.  It assumes a  maximum size of the fixed part.  It will not work on any architecture/compiler that choses to align the char variables on a word boudary, rearrange the order of the variables on the stack, put n2, n3 and/or n4 in registers, etc.

TheMadManiac's solution (except the typo - the second period should be a comma) is much safer.
alexo, MadManiac and I both assumed a maximum size of 100,
which I admit is sloppy, but seems safe enough on the literal constant 18.1235468
On a variable you should check that the magnitude is < 1e96
I made no assumptions about whether n2, n3, n4 are in registers or stacked.
Ozo, please disregard my comment.  I have no idea what posessed me to write what I did.  (I thought the first argument was n1 and not n.  I'm off to buy a bigger monitor, better glasses and a foot-from-mouth remover.)  Please accept my humble apologies.