Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion api/Print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,22 +238,36 @@ 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 n, uint16_t base)
{
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
char *str = &buf[sizeof(buf) - 1];

*str = '\0';

uint8_t minDigits = 1;
uint8_t maxDigits = sizeof(buf) - 1;
if (base > 0xFF)
{
minDigits = base >> 8;
base = base & 0xFF;
}
if (minDigits > maxDigits) minDigits = maxDigits;

// prevent crash if called with base == 1
if (base < 2) base = 10;

uint8_t usedDigits = 0;
do {
char c = n % base;
n /= base;

*--str = c < 10 ? c + '0' : c + 'A' - 10;
usedDigits++;
} while(n);
while (usedDigits++ < minDigits) {
*--str = '0';
}

return write(str);
}
Expand Down
14 changes: 11 additions & 3 deletions api/Print.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,25 @@
#include "Printable.h"

#define DEC 10
#define HEX 16
#define HEX 0x0010
#define HEX2 0x0210
#define HEX4 0x0410
#define HEX8 0x0810
#define OCT 8
#define BIN 2
#define BIN 0x0002
#define BIN2 0x0202
#define BIN4 0x0402
#define BIN8 0x0802
#define BIN16 0x1002
#define BIN32 0x2002

namespace arduino {

class Print
{
private:
int write_error;
size_t printNumber(unsigned long, uint8_t);
size_t printNumber(unsigned long, uint16_t);
size_t printULLNumber(unsigned long long, uint8_t);
size_t printFloat(double, int);
protected:
Expand Down
Loading