1.1p ­čÜž printf, sprintf

Formatiertes Ausgeben von Werten

Tests mit Java

public class PrintfDemo{
  public static void test(){
    String s = "Hallo";  
    System.out.printf("\fHallo zu printf \n"); // \f Konsole l├Âschen \n neue Zeile
    System.out.printf("Strings:%n");    // %n neue Zeile
    System.out.printf(" padding:\n");
    System.out.printf("\t[%10s]\n", s); // \t Tabulator
    System.out.printf("\t[%-10s]\n", s);
    System.out.printf(" truncating:\n"); // Abschneiden, auf Gr├Â├če reduzieren
    System.out.printf("\t%.4s\n", s);
    System.out.printf("Characters:\t%c %%\n", 'A');
    System.out.printf("Integers:\n");
    System.out.printf("\tDecimal:\t%d [%4d] [%-4d] [%04d] %+d %+d\n",1,2,3,4,5,-6);
    System.out.printf("\tHexadecimal:\t%x %x %X %#x %02x %#04x %#06x\n", 5, 10, 10, 6,10,10,127);
    System.out.printf("\tOctal:\t\t%o %#o %#o\n", 10, 10, 4);
    System.out.printf("Floating point:\n");
    System.out.printf("\tRounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
    System.out.printf("\tPadding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
    System.out.printf("\tScientific:\t%E %e\n", 1.5, 1.5);
    System.out.printf("\tHexadecimal:\t%a %A\n", 1.5, 1.5);
    System.out.printf("\tSpecial values:\t0/0=%f 1/0=%f\n", 0.0/0.0, 1.0/0.0);
    System.out.printf("\tDifference f&g:\tf: %f g: %g\n", 0.00001, 0.00001);
  }
}

Ausgabe

Hallo zu printf 
Strings:
 padding:
	[     Hallo]
	[Hallo     ]
 truncating:
	Hall
Characters:	A %
Integers:
	Decimal:	1 [   2] [3   ] [0004] +5 -6
	Hexadecimal:	5 a A 0x6 0a 0x0a 0x007f
	Octal:		12 012 04
Floating point:
	Rounding:	1,500000 2 1,30000000000000000000000000000000
	Padding:	01,50 1,50  1,50
	Scientific:	1,500000E+00 1,500000e+00
	Hexadecimal:	0x1.8p0 0X1.8P0
	Special values:	0/0=NaN 1/0=Infinity
	Difference f&g:	f: 0,000010 g: 1,00000e-05

Test mit Arduino STM32

Bei dem Testprogramm wird ab Floating Point normalerweise nur noch Mist ausgegeben!
Das liegt daran, dass die Verarbeitung von Flie├čkommaformatierungen recht viel Programmspeicher (ca. 2,5 KiByte) ben├Âtigen w├╝rde und bei den kleinen ┬ÁC dies vermieden werden sollte, so wurde der Code f├╝r Float Printf einfach weg gelassen (default).
In den Werkzeug-Einstellungen f├╝r den STM32 kann die ganze printf-Lib (+ Float Printf) eingebunden werden in dem man sie ausw├Ąhlt.

void setup() {
  char buf[100];
  Serial.begin(9600); // Serielle Schnittstelle starten und Baudrate festlegen
  const char* s = "Hello";
  Serial.printf("Strings:\n"); // same as puts("Strings");
  Serial.printf(" padding:\n");
  Serial.printf("\t[%10s]\n", s);
  Serial.printf("\t[%-10s]\n", s);
  Serial.printf("\t[%*s]\n", 10, s);
  Serial.printf(" truncating:\n");
  Serial.printf("\t%.4s\n", s);
  Serial.printf("\t%.*s\n", 3, s);
  Serial.printf("Characters:\t%c %%\n", 'A');
 
  Serial.printf("Integers:\n");
  Serial.printf("\tDecimal:\t%i %d %.6i %i %.0i %+i %i\n",1,2,3,0,0,4,-4);
  Serial.printf("\tHexadecimal:\t%x %x %X %#x\n",5,10,10,6);
  Serial.printf("\tOctal:\t\t%o %#o %#o\n", 10, 10, 4);
 
  Serial.printf("Floating point:\n");
  //sprintf(buf,"\tRounding:\t%f %.0f %.10f\n", 1.5, 1.5, 1.3);
  //Serial.print(buf);
  Serial.printf("\tRounding:\t%f %.0f %.10f\n", 1.5, 1.5, 1.3);
  Serial.printf("\tPadding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
  Serial.printf("\tScientific:\t%E %e\n", 1.5, 1.5);
  Serial.printf("\tHexadecimal:\t%a %A\n", 1.5, 1.5);
  Serial.printf("\tSpecial values:\t0/0=%g 1/0=%g\n", 0.0/0.0, 1.0/0.0);
  Serial.printf("Fixed-width types:\n");
  Serial.printf("\tLargest 32-bit value is %" PRIu32 " or %#" PRIx32 "\n",
                                   UINT32_MAX,     UINT32_MAX );
}
void loop() {
}

Ausgabe

Strings:
 padding:
	[     Hello]
	[Hello     ]
	[     Hello]
 truncating:
	Hell
	Hel
Characters:	A %
Integers:
	Decimal:	1 2 000003 0  +4 -4
	Hexadecimal:	5 a A 0x6
	Octal:		12 012 04
Floating point:
	Rounding:	1.500000 2 1.3000000000
	Padding:	01.50 1.50  1.50
	Scientific:	1.500000E+00 1.500000e+00
	Hexadecimal:	a A
	Special values:	0/0=nan 1/0=inf
Fixed-width types:
	Largest 32-bit value is 4294967295 or 0xffffffff