未验证 提交 cbbea1a0 编写于 作者: W winfenggao 提交者: GitHub

[kservice] 增加printf格式2进制和8进制,RT_KPRINTF_USING_LONGLONG 和 RT_PRINTF_SPECIAL 做了相应处理 (#6361)

* 增加printf格式2进制和8进制,RT_KPRINTF_USING_LONGLONG 和 RT_PRINTF_SPECIAL 做了相应处理
上级 6da3b2b4
...@@ -666,26 +666,13 @@ rt_inline int divide(long *n, int base) ...@@ -666,26 +666,13 @@ rt_inline int divide(long *n, int base)
int res; int res;
/* optimized for processor which does not support divide instructions. */ /* optimized for processor which does not support divide instructions. */
if (base == 10)
{
#ifdef RT_KPRINTF_USING_LONGLONG
res = (int)(((unsigned long long)*n) % 10U);
*n = (long long)(((unsigned long long)*n) / 10U);
#else
res = (int)(((unsigned long)*n) % 10U);
*n = (long)(((unsigned long)*n) / 10U);
#endif
}
else
{
#ifdef RT_KPRINTF_USING_LONGLONG #ifdef RT_KPRINTF_USING_LONGLONG
res = (int)(((unsigned long long)*n) % 16U); res = (int)(((unsigned long long)*n) % base);
*n = (long long)(((unsigned long long)*n) / 16U); *n = (long long)(((unsigned long long)*n) / base);
#else #else
res = (int)(((unsigned long)*n) % 16U); res = (int)(((unsigned long)*n) % base);
*n = (long)(((unsigned long)*n) / 16U); *n = (long)(((unsigned long)*n) / base);
#endif #endif
}
return res; return res;
} }
...@@ -723,9 +710,9 @@ static char *print_number(char *buf, ...@@ -723,9 +710,9 @@ static char *print_number(char *buf,
{ {
char c, sign; char c, sign;
#ifdef RT_KPRINTF_USING_LONGLONG #ifdef RT_KPRINTF_USING_LONGLONG
char tmp[32]; char tmp[64];
#else #else
char tmp[16]; char tmp[32];
#endif /* RT_KPRINTF_USING_LONGLONG */ #endif /* RT_KPRINTF_USING_LONGLONG */
int precision_bak = precision; int precision_bak = precision;
const char *digits; const char *digits;
...@@ -759,7 +746,7 @@ static char *print_number(char *buf, ...@@ -759,7 +746,7 @@ static char *print_number(char *buf,
#ifdef RT_PRINTF_SPECIAL #ifdef RT_PRINTF_SPECIAL
if (type & SPECIAL) if (type & SPECIAL)
{ {
if (base == 16) if (base == 2 || base == 16)
size -= 2; size -= 2;
else if (base == 8) else if (base == 8)
size--; size--;
...@@ -809,7 +796,16 @@ static char *print_number(char *buf, ...@@ -809,7 +796,16 @@ static char *print_number(char *buf,
#ifdef RT_PRINTF_SPECIAL #ifdef RT_PRINTF_SPECIAL
if (type & SPECIAL) if (type & SPECIAL)
{ {
if (base == 8) if (base == 2)
{
if (buf < end)
*buf = '0';
++ buf;
if (buf < end)
*buf = 'b';
++ buf;
}
else if (base == 8)
{ {
if (buf < end) if (buf < end)
*buf = '0'; *buf = '0';
...@@ -1068,6 +1064,9 @@ RT_WEAK int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list arg ...@@ -1068,6 +1064,9 @@ RT_WEAK int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list arg
continue; continue;
/* integer number formats - set up the flags and "break" */ /* integer number formats - set up the flags and "break" */
case 'b':
base = 2;
break;
case 'o': case 'o':
base = 8; base = 8;
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册