etl/docs/strings/basic_format_spec.md
John Wellbelove 4a88884b39
Issue/add hugo support for documentation (#1449)
* Add ranges

* Initial Hugo setup

* Work in progress

* Added selection for local or remote site

* Updated to 'light' theme

* Changed to using Hextra Hugo theme

* Changed to using Hextra Hugo theme

* Changed to Hextra Hugo theme

* Change to Hextra Hugo theme

* Updated Hugo setup.

* Updated Hugo setup.

# Conflicts:
#	docs/releases/_index.md

* Work in progress

* Added new fonts

Added new documentation

* Latest documentation updates

* Latest documentation updates

# Conflicts:
#	docs/containers/array.md
#	docs/containers/array_view.md
#	docs/containers/array_wrapper.md
#	docs/containers/bip_buffer_spsc_atomic.md
#	docs/containers/bitset.md
#	docs/containers/indirect_vector.md
#	docs/containers/vector.md
#	docs/getting-started/compilers.md

* Added bloom_filter markdown doc

* Added more documentation

Updated CSS for light and dark modes

* Fixed some menus

Added mode documentation files

* Updated CSS rules

Added badges to home page
Added uniqur_ptr + pool tutorial

* Fixed formatting on the home page markdown

Modified light amd dark code formatting

* Updated unique_ptr-with-pool

* Added container and shared message tutorials

* Updates to documentation

* Added const_multimap

* Updated source-formatting.md

* Added initial raw text files form Web site editor

* Innore coverage build directory

* Exported raw text documentation files from the web site editor

* Hugo updates

* Added Hugo intalation and markdown descriptions

* More addition to the documentation

* Added closure.md and updates to delegate.md

* Added format.md

* Added documentation for etl::delegate_observable, etl::function, Base64 codec

* Added io_port documentation

* Added basic_format_spec

* Added documentation for string_stream and string utilities.

* Added more documentation

Updated the documentation CSS

* Added documentation for clocks, day, duration

* Added more documentation for chrono classes

Updated callouts

* More chrono documentation

* Completed chrono documentation

* Maths functions documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Added multiple documentation files

* Added iterator.md

* Added debug_count.md and versions.md

* Added debug_count.md and versions.md

* Added more documentation

* More documentation

* Added some design pattern documentation

Modified some of the layout files
Modified the About documentation

* Converted more documentation pages

Modified the site CSS

* Added more documentation

Moced some documentation files to new directories

* Added more documentation

Tweaks to CSS

* Added callback_timer_deferred_locked documentation

* Added callback_timer_locked documentation

* More documentation updates

* More documentation updates

* More documentation updates

* New documentation files.

Harmonised file name format

* New documentation files.

* Multiple document updates

* Multiple document updates

* Final conversion of web pages

* Updates before PR

* Updates before PR

* Updates before PR

# Conflicts:
#	docs/blog/_index.md

* Final pre PR updates

* Updates to message framework documentation

* Renamed directory

* Fix spelling

* Added author and date to blog files

Moved documentation files merged from development

* Fixed 'Description' typo

* Fix typos

# Conflicts:
#	docs/IO/io_port.md
#	docs/containers/sets/const-multiset.md
#	docs/containers/sets/const-set.md
#	docs/maths/correlation.md
#	docs/maths/gamma.md

* Renamed two files to lower case

* Minor renaming

* Added author and date

* Updated callout on bresenham_line.md

Added support for showing the ETL version on the documentation first page, by copying the version.txt file as a hugo asset.
Updated the Python 'update_release.py' to copy 'version.txt'

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

# Conflicts:
#	docs/getting-started/view-the-docs-locally/hugo-commands.md

* Added a link to pseudo_moving_average.md

* Updated title pages for groups

* Fixed missing 404 for non-existent pages

* Fixed coordinate variable names in the 'Calculating the intersection' example

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.co.uk>
2026-06-06 13:12:44 +01:00

411 lines
6.9 KiB
Markdown

---
title: "basic_format_spec"
---
`format_spec`
`wformat_spec`
`u16format_spec`
`u32format_spec`
A template class and four typedefs that allow a specification for string formatting functions and streams.
It defines specifications for strings, bool, integrals, floating point and pointers.
Used in conjunction with `etl::to_string` and string streams
The class stores the following specifications:
| Specification | Description |
| -------------- | -------------------------------------------------------------------------- |
| base | The number base. Predefined settings for binary, octal, decimal and hex. |
| width | The total minimum field width for the value's text representation. |
| precision | The total number of decimal places. |
| upper_case | If true then numerical digits for bases >10 are in upper case. |
| left_justified | If true then the text representation is left justified with padding up to the field width on the right. |
| boolalpha | If true then Boolean values are rendered as "true" and "false". |
| showbase | If true then binary, octal and hex values are prefixed with the base tag. |
| fill | Determines the character used for the padding for width. |
## basic_format_spec
```cpp
template <typename TString>
class basic_format_spec
```
---
```cpp
basic_format_spec()
```
**Description**
The default constructor.
Sets:-
| Specification | Default |
| ---------------- | ------- |
| `base` | `10` |
| `width` | `0` |
| `precision` | `0` |
| `upper case` | `false` |
| `left justified` | `false` |
| `boolalpha` | `false` |
| `show base` | `false` |
| `fill` | `' '` |
```cpp
basic_format_spec& base(const uint32_t b)
```
**Description**
Sets the base to b.
---
```cpp
basic_format_spec& binary()
```
**Description**
Sets the base to binary.
---
```cpp
basic_format_spec& octal()
```
**Description**
Sets the base to octal.
---
```cpp
basic_format_spec& hex()
```
**Description**
Sets the base to hexadecimal.
---
```cpp
basic_format_spec& octal()
```
**Description**
Sets the base to octal.
---
```cpp
uint32_t get_base() const
```
**Description**
Returns the current setting for base.
---
```cpp
basic_format_spec& width(const uint32_t w)
```
**Description**
Sets the width to `w`.
---
```cpp
uint32_t get_width() const
```
**Description**
Returns the current width value.
---
```cpp
basic_format_spec& precision(const uint32_t p)
```
**Description**
Sets the precision to `p`.
```cpp
uint32_t get_precision() const
```
**Description**
Returns the current precision value.
---
```cpp
basic_format_spec& upper_case(const bool b)
```
**Description**
Sets the upper case flag to `b`.
Only affects numerical output such as hexadecimal.
---
```cpp
bool is_upper_case() const
```
**Description**
Returns true if the upper case flag is set.
---
```cpp
basic_format_spec& show_base(const bool b)
```
**Description**
Sets the showbase flag to `b`.
Only affects binary and hexadecimal output.
---
```cpp
bool is_show_base() const
```
**Description**
Returns `true` if the `showbase` flag is set.
---
```cpp
basic_format_spec& fill(const typename TString::value_type c)
```
**Description**
Sets the fill character to `c`.
---
```cpp
typename TString::value_type get_fill() const
```
**Description**
Returns the fill character.
---
```cpp
basic_format_spec& left()
```
**Description**
Sets the `left` justified flag to `true`.
---
```cpp
bool is_left() const
```
**Description**
Returns `true` if the `left` justified flag is set.
---
```cpp
basic_format_spec& right()
```
**Description**
Sets the left justified flag to false.
---
```cpp
bool is_right() const
```
**Description**
Returns `true` if the `left` justified flag is clear.
```cpp
basic_format_spec& boolalpha(bool b)
```
**Description**
Sets the `bool alpha` flag to `b`.
---
```cpp
bool is_boolalpha() const
```
Returns `true` if the `bool alpha` flag is set.
## Typedefs
| Type | Specialisation |
| -------------- | --------------------------------------- |
| format_spec | etl::basic_format_spec<etl::istring> |
| wformat_spec | etl::basic_format_spec<etl::iwstring> |
| u16format_spec | etl::basic_format_spec<etl::iu16string> |
| u32format_spec | etl::basic_format_spec<etl::iu32string> |
## Stream manipulators
These manipulators are used in conjunction with the ETL's string streams.
Streams may also use a `format_spec` as a manipulator.
```cpp
setbase(uint32_t base)
```
**Description**
Sets the base for numerical output to base.
---
```cpp
setw(uint32_t width)
```
**Description**
Sets the format width to `width`.
---
```cpp
template <typename TChar>
setfill(TChar fill)
```
**Description**
Sets the fill character to fill.
---
```cpp
setprecision(uint32_t precision)
```
**Description**
Sets the number of decimal places to precision.
---
```cpp
bin
```
**Description**
Sets the base for numerical output to binary.
---
```cpp
oct
```
**Description**
Sets the base for numerical output to octal.
---
```cpp
dec
```
**Description**
Sets the base for numerical output to decimal.
---
```cpp
hex
```
**Description**
Sets the base for numerical output to hexadecimal.
---
```cpp
left
```
**Description**
Sets the alignment to left.
---
```cpp
right
```
**Description**
Sets the alignment to right.
---
```cpp
boolalpha
```
**Description**
Sets the boolalpha flag to true.
---
```cpp
noboolalpha
```
**Description**
Sets the boolalpha flag to false.
---
```cpp
uppercase
```
**Description**
Sets the uppercase flag to true.
---
```cpp
nouppercase
```
**Description**
Sets the uppercase flag to false.
---
```cpp
showbase
```
**Description**
Sets the showbase flag to true.
---
```cpp
noshowbase
```
**Description**
Sets the showbase flag to false.
## Example (to_string)
```cpp
etl::format_spec format;
// Format as a hex character, minimum fill width of 8, fill with zeros.
format.hex().width(8).fill('0');
etl::string<8> text;
// 'text' is set to "00123456"
etl::to_string(1193046, text, format);
// Format minimum fill width of 8, fill with space and three decimal digits.
format.width(8).fill(' ').precision(3);
// 'text' is set to " 3.142"
etl::to_string(3.1415, text, format);
```
## Example (string_stream)
```cpp
etl::string<20> buffer;
etl::string_stream stream(buffer);
// Manipulators
stream << etl::showbase
<< etl::bin << 123456 << " "
<< etl::oct << 123456 << " "
<< etl::dec << 123456 << " "
<< etl::hex << 123456;
```
The generated string:-
`0b11110001001000000 0361100 123456 0x1e240`
---
```cpp
// Format spec
etl::format_spec format;
format.show_base(true).hex();
stream << format << 123456;
```
The generated string:-
`0x1e240`