sprintf.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 163 行
C
163 行
/**************************************************************** * >>>> See header file for more information. <<<< ****************************************************************/#include "sprintf.h"int char_pos; /* Number of characters written to buffer (not counting \0) */static voidserial_out_hex (char *out, unsigned int n){ static char *digit = "0123456789abcdef"; int i; for (i = 7; i >= 0; i--) out[char_pos++] = digit[(n >> (4 * i)) & 15];}static voidserial_out_chars (char *out, int n, char c){ while (n-- > 0) out[char_pos++] = c;}static voidserial_out_str (char *out, char *s, int left, int field){ char *p; int len; if (s == 0) s = "<NULL>"; if (field) { for (p = s, len = 0; *p; p++) len++; if (!left) serial_out_chars (out, field - len, ' '); while (*s) out[char_pos++] = *s++; if (left) serial_out_chars (out, field - len, ' '); } else { while (*s) out[char_pos++] = *s++; }}voidserial_out_dec (char *out, int n, int is_signed, int left, int field){ char buff[40], *s = &buff[39]; unsigned int un, negative; if (is_signed && n < 0) { negative = 1; un = (unsigned int) -n; } else { negative = 0; un = (unsigned int) n; } *s = '\0'; do { *(--s) = '0' + un % 10; un /= 10; } while (un > 0); if (negative) *(--s) = '-'; serial_out_str (out, s, left, field);}void formated_out (char *out, char *format, va_list arg_list){ int field, left; if (format == 0) format = "<NULL>"; while (*format) { if (*format != '%') { out[char_pos++] = *format++; continue; } format++; if (*format == 'h' || *format == 'l' || *format == 'L') format++; /* Skip unsupported type prefixes */ if (*format == '-') { format++; left = 1; } else left = 0; field = 0; while (*format >= '0' && *format <= '9') field = 10 * field + *format++ - '0'; switch (*format) { case 's': serial_out_str (out, va_arg (arg_list, char *), left, field); break; case 'u': serial_out_dec (out, va_arg (arg_list, int), 0, left, field); break; case 'd': serial_out_dec (out, va_arg (arg_list, int), 1, left, field); break; case 'x': serial_out_hex (out, va_arg (arg_list, int)); break; case 'p': serial_out_hex (out, va_arg (arg_list, int)); break; case 'c': out[char_pos++] = va_arg (arg_list, int); break; case '%': out[char_pos++] = *format; break; default: out[char_pos++] = '%'; out[char_pos++] = *format; (void) va_arg (arg_list, int); break; } format++; } /* Output the trailing \0 of the format string. */ out[char_pos] = '\0';}int svprintf (char *buffer, char *format, va_list arg_list){ char_pos = 0; formated_out (buffer, format, arg_list); return char_pos;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?