Printf() format codes
Each conversion specification consists of:
leading ‘%’ character
zero or more flags
an optional minimum field width
an optional precision field preceded by ‘.’
an optional length modifier
a conversion specifier
Flags
- ‘space’
fill up with spaces to reach the specified length
- -
left justify
- +
add sign field of decimal conversion
- #
convert to alternative form
prepend 0 to octal output
ignored for decimal output
prepend 0X to hexadecimal output
- 0
fill up with zeroes to reach the specified length
Integer types
Length modifiers
The optional length modifier specifies the size of the argument.
- no modifier
bool, enum, short, int are passed as int
- %h
convert to (unsigned) short before printing. Only the low 16 bits are printed.
- %hh
not implemented
- %j
not implemented
- %l
long
- %ll, %L
long long
- %t
ptr_diff_t
- %z, %Z
size_t, ssize_t
Conversion specifiers
Conversion specifiers control the output.
- %d
signed decimal
- %u
unsigned decimal
- %o
unsigned octal
- %x
unsigned lower case hexadecimal
- %X
unsigned upper case hexadecimal
The floating point conversion specifiers are not implemented:
%a
%A
%e
%E
%f
%F
%g
%G
The following tables shows the correct combinations of modifiers and specifiers for the individual integer types.
Type |
Format specifier |
---|---|
bool |
%d, %x |
char |
%d, %x |
unsigned char |
%u, %x |
short |
%d, %x |
unsigned short |
%u, %x |
int |
%d, %x |
unsigned int |
%u, %x |
long |
%ld, %lx |
unsigned long |
%lu, %lx |
long long |
%lld, %llx |
unsigned long long |
%llu, %llx |
off_t |
%llu, %llx |
ptr_diff_t |
%td, %tx |
fdt_addr_t |
%pa, see pointers |
fdt_size_t |
%pa, see pointers |
phys_addr_t |
%pa, see pointers |
phys_size_t |
%pa, see pointers |
resource_size_t |
%pa, see pointers |
size_t |
%zu, %zx, %zX |
ssize_t |
%zd, %zx, %zX |
Characters
- %%
a ‘%’ character is written
- %c
prints a single character
- %lc
not implemented
Strings
- %s
prints a UTF-8 string (char *)
- %ls
prints a UTF-16 string (u16 *)
Pointers
- %p
prints the address the pointer points to hexadecimally
- %pa, %pap
prints the value of a phys_addr_t value that the pointer points to preceded with 0x and zero padding according to the size of phys_addr_t. The following types should be printed this way:
fdt_addr_t
fdt_size_t
phys_addr_t
phys_size_t
resource_size_t
- %pD
prints a UEFI device path
- %pi4, %pI4
prints IPv4 address, e.g. ‘192.168.0.1’
- %pm
prints MAC address without separators, e.g. ‘001122334455’
- %pM
print MAC address colon separated, e.g. ‘00:01:02:03:04:05’
- %pUb
prints GUID big endian, lower case e.g. ‘00112233-4455-6677-8899-aabbccddeeff’
- %pUB
prints GUID big endian, upper case e.g. ‘00112233-4455-6677-8899-AABBCCDDEEFF’
- %pUl
prints GUID little endian, lower case e.g. ‘33221100-5544-7766-8899-aabbccddeeff’
- %pUL
prints GUID little endian, upper case e.g. ‘33221100-5544-7766-8899-AABBCCDDEEFF’
- %pUs
prints text description of a GUID or if such is not known little endian, lower case, e.g. ‘system’ for a GUID identifying an EFI system partition.