From 330013e1ee3e568ecd1af6534b165b4033afb9a5 Mon Sep 17 00:00:00 2001 From: Daniel Fekete Date: Fri, 12 May 2017 05:40:20 +0200 Subject: [PATCH] Print: add 64 bit number printing Thanks to Pito --- STM32/cores/arduino/Print.cpp | 40 +++++++++++++++++++++++++++++++++-- STM32/cores/arduino/Print.h | 9 +++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/STM32/cores/arduino/Print.cpp b/STM32/cores/arduino/Print.cpp index 1e4c99a..6fc9275 100644 --- a/STM32/cores/arduino/Print.cpp +++ b/STM32/cores/arduino/Print.cpp @@ -106,6 +106,28 @@ size_t Print::print(unsigned long n, int base) else return printNumber(n, base); } +size_t Print::print(long long n, int base) +{ + if (base == 0) { + return write(n); + } else if (base == 10) { + if (n < 0) { + int t = print('-'); + n = -n; + return printNumber(n, 10) + t; + } + return printNumber(n, 10); + } else { + return printNumber(n, base); + } +} + +size_t Print::print(unsigned long long n, int base) +{ + if (base == 0) return write(n); + else return printNumber(n, base); +} + size_t Print::print(double n, int digits) { return printFloat(n, digits); @@ -184,6 +206,20 @@ size_t Print::println(unsigned long num, int base) return n; } +size_t Print::println(long long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + +size_t Print::println(unsigned long long num, int base) +{ + size_t n = print(num, base); + n += println(); + return n; +} + size_t Print::println(double num, int digits) { size_t n = print(num, digits); @@ -200,9 +236,9 @@ size_t Print::println(const Printable& x) // Private Methods ///////////////////////////////////////////////////////////// -size_t Print::printNumber(unsigned long n, uint8_t base) +size_t Print::printNumber(unsigned long long n, uint8_t base) { - char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte. + char buf[8 * sizeof(long long) + 1]; // Assumes 8-bit chars plus zero byte. char *str = &buf[sizeof(buf) - 1]; *str = '\0'; diff --git a/STM32/cores/arduino/Print.h b/STM32/cores/arduino/Print.h index d099a3b..5005623 100644 --- a/STM32/cores/arduino/Print.h +++ b/STM32/cores/arduino/Print.h @@ -34,11 +34,14 @@ #endif #define BIN 2 +typedef unsigned long long uint64_t; +typedef long long int64_t; + class Print { private: int write_error; - size_t printNumber(unsigned long, uint8_t); + size_t printNumber(unsigned long long, uint8_t); size_t printFloat(double, uint8_t); protected: void setWriteError(int err = 1) { write_error = err; } @@ -67,6 +70,8 @@ class Print size_t print(unsigned int, int = DEC); size_t print(long, int = DEC); size_t print(unsigned long, int = DEC); + size_t print(long long, int = DEC); + size_t print(unsigned long long, int = DEC); size_t print(double, int = 2); size_t print(const Printable&); @@ -79,6 +84,8 @@ class Print size_t println(unsigned int, int = DEC); size_t println(long, int = DEC); size_t println(unsigned long, int = DEC); + size_t println(long long, int = DEC); + size_t println(unsigned long long, int = DEC); size_t println(double, int = 2); size_t println(const Printable&); size_t println(void);