Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: C18 Ограничения sprintf
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Auratos
Добрый день. У меня есть число типа float. Необходимо его записать в массив, дополнив целую и дробную части до определенного размера нулями. С целой частью проблем нет, дробную пока не получилось дополнить нулями. Но проблема в другом: sprintf отказывается принимать числа больше int. Подскажите, пожалуйста, как можно ли как-то обойти это ограничение? Может быть в настройках компилятора что-то включить? Среда разработки - MPLab X IDE. Вот пример кода, где я использую sprintf

Код
void main(void)
{
    float minSet1 = 0.5;
    unsigned char Setting[11] = "          ";
    NumbConverter(Setting, minSet1, 36);
}


void NumbConverter (void* destination, float numb, unsigned char numbDecimal)
{
    unsigned char* array = (unsigned char*)destination;
    unsigned int whole;
    unsigned long decimal;
    whole = numb;                                           // целая часть
    switch (numbDecimal)
    {
        case 36:
            decimal = (numb - whole) * 1000000;             // дробная часть
            sprintf((char*)array, (const far rom char*)"%03d.%06u", whole, decimal);
            break;
        case 43:
            decimal = (numb - whole) * 1000;                // дробная часть
            sprintf((char*)array, (const far rom char*)"%04d.%03u", whole, decimal);
            break;
        case 46:
            decimal = (numb - whole) * 1000000;             // дробная часть
            sprintf((char*)array, (const far rom char*)"%04d.%06u", whole, decimal);
            break;
    }
}


На выходе я получаю массив Setting с содержимым "000.000007" вместо "000.500000". Не знаю, как быть
megajohn
для unsigned long нужно применять lu
читать здесь
эксперементировать здесь
Auratos
megajohn, большое спасибо за помощь. До этого пробовал %u, %ul, но не работало
Сергей Борщ
Цитата(megajohn @ Nov 3 2015, 16:24) *
читать здесь
Из википедии может сложиться впечатление, что форматные строки printf и scanf одинаковые, потому что для scanf там рассмотрены самые примитивные случаи. На самом деле форматные строки существенно отличаются, поэтому читать лучше здесь. Дома попробую найти ссылку на еще более подробное описание.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.