Имею строку с константой, равной, например, "3.25" (идет синтаксический разбор строки). Как из этой строки получить представление числа в машинном формате для float(double).
Что-то я не догоняю...
Если грам. разбор, то почему не используешь flex/bison или хотя бы просто flex?
Он бы тебе выделил нужные лексемы в отдельные строчки - делай с ними что хочешь - хоть дергай тот же atof:
Какой там flex/bison. У меня заказчик под M$. Это только что я взял QT ради кроссплатформенности. Не говоря о том, что в C/C++ я пишу только около года.
Неужели, раз M$, то сканеры/парсеры они каждый раз пишут сами...
Точно помню, что flex был под маздай тоже. Кроме того, он генерит сишный код, которы вроде бы масдаем транслировался. Т.е. *.l можно обработать в Linux, потом просто переписать файлики в масдай и радоваться жизни
Это не то, что я думаю?
#include <stdio.h>
int main (int argc, char ** argv)
{
int i;
char *str="3.12";
union {
float a;
unsigned char k[sizeof(float)];
} p;
p.a=atof(str);
for (i=0; i<sizeof(float); i++)
printf ("byte %d: %d \n",i, (int)p.k[i]);
return 1;
}
К сожалению чтение элемента union'а, отличного от того, в который была
произведена последняя запись вызывает implementation-defined behaviour (читай: как оно сработает и сработает ли вобще - неизвестно, это надо будет прочесть в документации конкретного компилятора). К счастью, можно вон так вот:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
size_t i;
float a = atof(argv[1] ? argv[1] : "3.14");
for (i = 0; i < sizeof (float); i++)
printf ("%02x", ((unsigned char *) &a)[i]);