Typisch: Wertebereichsüberschreitung!
template<typename T> char* bigToStr(char* buffer, T value, uint8_t base = 10)
{
bool negative = value < 0;
if(negative) value *= -1LL;
//char* ptr = buffer+BufferSize;
char* ptr = buffer+sizeof(value)*8+1+1; // buffergroesse berechnen, size * 8bit +Vorzeichen +NullByte
*(--ptr) = 0;
switch(base)
{
case 2: while(value) // BINARY
{
*(--ptr) = '0' + (value & 0x01);
value >>= 1;
}
break;
case 8: while(value) // OKTAL
{
*(--ptr) = '0' + (value & 0x07);
value >>= 3;
}
break;
case 16: while(value) // HEX
{
*(--ptr) = '0' + (value & 0x0f);
if(*ptr > '9') *ptr += 'A'-'9'-1;
value >>= 4;
}
break;
default: while(value) // UNIVERSAL
{
uint8_t rest = value % base;
*(--ptr) = '0' + rest;
if(*ptr > '9') *ptr += 'A'-'9'-1;
value /= base;
}
break;
}
if(negative) *(--ptr) = '-';
return ptr;
}
unsigned long long x = 0;
unsigned long long y = 0;
unsigned long test = -1;
void setup()
{
Serial.begin(9600);
x = 60ULL*60*1000;
y = x*100*100;
char buffer[100];
Serial.print("test ");
Serial.println(test);
Serial.print("x ");
Serial.println(bigToStr(buffer,x));
Serial.print("y ");
Serial.println(bigToStr(buffer,y));
}
void loop()
{
}
bigToStr() funktioniert hier, bedarf aber noch einer Überarbeitung.