ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
12600 Топик полностью
Sot (30.07.2004 17:13, просмотров: 1) ответил bialix на кстати, не знаю всей предыстории, но с printf есть прикол
Насчет кейловского printf не могу сказать, т.к. пользуюсь своим форматером Вот кусок отработки %d:
      case 'd':                  /* Вывести параметр, как 2-ух байтное число */
        limit = sizeof(int);  fptr = (void*)(&va_arg(*ap, int));
        goto FORMAT_PARAM;

Из него следует, что ести тип не int макрос va_arg отработает неправильно, поэтому следует указать явное приведение:
unsigned char packet[] = { 0xF0, 0x50 };	/* -4016 */

Не корректная отработка:
sprintf("r = %d", packet[0]);

Корректная отработка:
sprintf("r = %d", (int)packet[0]);
Возможно, если в кейловском printf сделать явное приведение к int переменной, все пройдет.