improved int to string conversion
This commit is contained in:
parent
105758079a
commit
65c2780b94
@ -31,29 +31,32 @@ char* __toString_bool(void* c, uint32 fmt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char* toString_int(int64 n){
|
char* toString_int(int64 n){
|
||||||
int64 d=n;
|
int64 d=n<0 ? -1*n : n;
|
||||||
char str[32];
|
char str[32];
|
||||||
uint8 i=sizeof(str);
|
uint8 i=sizeof(str);
|
||||||
str[--i]=0;
|
str[--i]=0;
|
||||||
while(d!=0){
|
if(d==0)
|
||||||
|
str[--i]='0';
|
||||||
|
else while(d!=0){
|
||||||
str[--i]='0' + d%10;
|
str[--i]='0' + d%10;
|
||||||
d/=10;
|
d/=10;
|
||||||
}
|
}
|
||||||
if(n>>63)
|
if(n<0)
|
||||||
str[--i]='-';
|
str[--i]='-';
|
||||||
return cptr_copy((char*)str+i);
|
return cptr_copy((char*)str+i);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
|
char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
|
||||||
uint64 d=n;
|
|
||||||
char str[32];
|
char str[32];
|
||||||
uint8 i=sizeof(str);
|
uint8 i=sizeof(str);
|
||||||
str[--i]=0;
|
str[--i]=0;
|
||||||
if(withPostfix)
|
if(withPostfix)
|
||||||
str[--i]= uppercase ? 'U' : 'u';
|
str[--i]= uppercase ? 'U' : 'u';
|
||||||
while(d!=0){
|
if(n==0)
|
||||||
str[--i]='0' + d%10;
|
str[--i]='0';
|
||||||
d/=10;
|
else while(n!=0){
|
||||||
|
str[--i]='0' + n%10;
|
||||||
|
n/=10;
|
||||||
}
|
}
|
||||||
return cptr_copy((char*)str+i);
|
return cptr_copy((char*)str+i);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,19 +53,26 @@ void kprintf(const char* format, ...){
|
|||||||
for(char c=format[i++]; c!=0; c=format[i++]){
|
for(char c=format[i++]; c!=0; c=format[i++]){
|
||||||
if(c=='%'){
|
if(c=='%'){
|
||||||
char* argstr=NULL;
|
char* argstr=NULL;
|
||||||
|
bool l=false;
|
||||||
c=format[i++];
|
c=format[i++];
|
||||||
format_escape_seq:
|
format_escape_seq:
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'u':
|
case 'u':
|
||||||
argstr=toString_uint(va_arg(vl, uint64),0,0);
|
argstr=toString_uint(
|
||||||
|
l ? va_arg(vl, uint64) : va_arg(vl, uint32)
|
||||||
|
,0,0);
|
||||||
break;
|
break;
|
||||||
case 'i': case 'd':
|
case 'i': case 'd':
|
||||||
argstr=toString_int(va_arg(vl, uint64));
|
argstr=toString_int(
|
||||||
|
l ? va_arg(vl, int64) : va_arg(vl, int32)
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
|
// float32 is promoted to float64 when passed through '...'
|
||||||
argstr=toString_float(va_arg(vl, float64),0,0);
|
argstr=toString_float(va_arg(vl, float64),0,0);
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
|
l=true;
|
||||||
if((c=format[i++]))
|
if((c=format[i++]))
|
||||||
goto format_escape_seq;
|
goto format_escape_seq;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user