LINUX.ORG.RU
ФорумJob

Нужно добавить в свою swprintf() версию для embedded device поддержу floats

 


0

1

В общем есть 2 реализации swprintf для embedded device без каких-либо внешних депов, чисто олдскульный C. Оба варианта swprintf() используют vswprintf() (ее реализация также в том же коде есть). Но в обоих вариантах в vswprintf() отсутствует поддержка %f. Т.е. нужно впихнуть туда реализацию ftoa() или что-то такое , и добавить case 'f':

Рылся по всяким гитхабам и гуглам, и к сожалению сам ничего не смог нормально сделать, т.к. не программист.

Если есть кто может разово решить проблему, был бы благодарен. Сколько платить не знаю, 20-30$ для такого сайта видимо мало судя по другим сообщениям :)


Вообще-то, это гуглится. ftoa - немного не то, надо еще поддержка формата, например %2.4f. У меня есть реализация, по большому счету, нагугленная в своё время.

lenin386 ★★★★
()
Ответ на: комментарий от lenin386

Я не программер, поэтому то что гуглится просто так в тот код что есть не влезает. Но я понял, за 20-30$ запариваться никто не будет даже гуглить-править )

endian
() автор топика
Ответ на: комментарий от endian

Я написал за сколько я готов сделать работу.
Кто-то готов сделать дешевле - пусть сделает дешевле.

vincent
()
Ответ на: комментарий от endian

Знаете, если все это писать с нуля - оригинальный код, оригинальный подход, patent-free, всё по серьёзному, то и $20000 могут оказаться не досточными деньгами. Тут абсолютно без шуток. А продать гугл-фу + элементарные навыки встраивания кода можно и за $30.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

Ну мне в общем и нужно чтобы за 30$ нашли и встроили. Чтобы тупо

#include <stdio.h> #include <wchar.h>

int main() { float x = 0.61; wchar_t buf[10]; swprintf(buf, 10, L"Test=%.2f", x); printf(«%ls\n»,buf); }

отработало как надо.

Вот что у меня уже есть: https://pastebin.com/L9aCXn0q

Как видно все есть уже, и реализация swprintf, и vswprintf тоже полный кейсов уже %d, %c, %u и тд - все есть и работает, кроме %f. Я почему то был почти уверен что тут дел для того кто в теме на минут 10 (с нуля конечно ничего писать не обязательно, любой паблик кусок с любого гитхаба, все подошло бы).

endian
() автор топика
Ответ на: комментарий от endian

Вот о том и речь. Сначала надо с вами наладить контакт, уточнить задачу, потом разобраться в гадюшном коде, написать свой код, доку. В конце еще вытрясти деньги. Это полный день, как минимум. Объявленная сумма одного уровня с текущей дневной зарплатой.

level1 ★★
()
Ответ на: комментарий от endian

Я готов сделать тебе за бартер. Два дня в след выходные ты помогаешь мне по сройке на даче. Будешь подсобником моим. Согласен?

kabanchik
()

$61 в час, а за сколько времени сделаю, за столько сделаю, мне кажется 3-4 часов должно хватить

Harald ★★★★★
()

swprintf для embedded
поддержка %f
ftoa()

Волосы дыбом встают! Что за камень-то хоть? Может этот маразм хоть как-то можно оптимизировать?

Eddy_Em ☆☆☆☆☆
()

на самом деле не сложно доработать:


case 'F':
                case 'f':
                {
                    double n = va_arg(ap, double);
                    int ipart = (int)n;
                    double fpart = n - (double)ipart;
                    limit = (!nolimit)? limit : SWPRINTF_FLOAT_PRECISION;
                    uppercase = (ch == 'F');

                    len = itoa(ipart, tmp, 10, 0, addplus, uppercase);

                    // after point
		    if (limit != 0){
			    tmp[len] = '.';  // add dot

			    len += itoa((int)(fpart * pow(10, limit)), tmp + len + 1, 10, 0, 0, uppercase) + 1;
		    }

                    hsrc = tmp;

                    width = width + limit + 1;

                    if (width > len)
                        width -= len;
                    else
                        width = 0;

                    if (left == 0) {
                        for (i = 0; i < width; i++) PUTCH(padzeros ? '0' : ' ');
                    }

                    for (i = 0; i < len; i++) PUTCH(hsrc[i]);

                    if (left != 0) {
                        for (i = 0; i < width; i++) PUTCH(' ');
                    }
				}
                    break;
zudwa
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.