added more int to string conversions

This commit is contained in:
Lauchmelder 2022-01-20 16:38:03 +01:00
parent 9fcfe4cb05
commit 5ec9cc709f
4 changed files with 55 additions and 25 deletions

View file

@ -3,4 +3,8 @@
#include "stdint.h"
int stoi(const char* string);
char* itoa(int number, char* string);
char* ultoa(unsigned long number, char* string, int base);
char* ltoa(long number, char* string, int base);
char* utoa(unsigned int number, char* string, int base);
char* itoa(int number, char* string, int base);

View file

@ -24,6 +24,8 @@ _start:
cbnz w2, 3b
4: # Jump to main() in C
ldr x4, =_start
ldr x0, =_start
ldr x1, =0x50000
str x0, [x1]
bl main
b 1b

View file

@ -21,8 +21,14 @@ int stoi(const char* string)
return output;
}
char* itoa(int number, char* string)
char* ultoa(unsigned long number, char* string, int base)
{
if(base < 2 || base > 16)
{
string[0] = '\0';
return string;
}
volatile char* temp = (volatile char*)0x40000000;
int i = 0;
if(number == 0)
@ -31,17 +37,12 @@ char* itoa(int number, char* string)
}
else
{
for(int n = (number < 0 ? -number : number); n > 0; n /= 10)
for(; number > 0; number /= base)
{
temp[i++] = '0' + (n % 10);
temp[i++] = '0' + (number % base);
}
}
if(number < 0)
{
temp[i++] = '-';
}
temp[i] = '\0';
string[i] = '\0';
@ -52,3 +53,26 @@ char* itoa(int number, char* string)
return string;
}
char* ltoa(long number, char* string, int base)
{
char* old_string = string;
if(number < 0)
{
number *= -1;
*string++ = '-';
}
itoa(number, string, base);
return old_string;
}
char* utoa(unsigned int number, char* string, int base)
{
return ultoa(number, string, base);
}
char* itoa(int number, char* string, int base)
{
return ltoa(number, string, base);
}

View file

@ -3,29 +3,24 @@
#include "string.h"
void print_clippy();
char* get_user_input(char* buffer);
void main()
{
const char* hex_chars = "0123456789ABCDEF";
register int* start_address asm ("x4");
long int start = (long int)start_address;
long int start = *(volatile long int*)0x50000;
char buffer[1024];
uart_init();
print_clippy();
uart_puts("Boot successful! \n");
uart_puts("Started execution at 0x");
for(int i = 0; i < 8; i++)
{
uart_putchar(hex_chars[start & 0xF]);
start >>= 4;
}
uart_puts(ultoa(start, buffer, 16));
char buffer[1024];
for(;;)
{
uart_puts("\n\nPlease enter first operand\n");
uart_puts("📎 ");
uart_gets(buffer);
get_user_input(buffer);
if(!strcmp(buffer, "clippy"))
{
@ -36,18 +31,23 @@ void main()
int a = stoi(buffer);
uart_puts("\nPlease enter second operand\n");
uart_puts("📎 ");
int b = stoi(uart_gets(buffer));
int b = stoi(get_user_input(buffer));
uart_puts("\n");
uart_puts(itoa(a, buffer));
uart_puts(itoa(a, buffer, 10));
uart_puts(" * ");
uart_puts(itoa(b, buffer));
uart_puts(itoa(b, buffer, 10));
uart_puts(" = ");
uart_puts(itoa(a * b, buffer));
uart_puts(itoa(a * b, buffer, 10));
}
}
char* get_user_input(char* buffer)
{
uart_puts("📎 ");
return uart_gets(buffer);
}
void print_clippy()
{
uart_puts(" \n");