Rechnen unsigned long x unsigned long

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.