Date: Mon, 10 Feb 2025 10:01:04 -0800
There is a manipulator gap to read/write integer numbers in binary. As you
well know, the standard manipulators are std::oct, std::dec, std::hex,
which is essentially a format flag onto ios_base::basefield.
Having a dedicated manipulator would close that gap and would eliminate the
current "trick" of using std::bitset. The (abbreviated) example in
cppreference .com reads:
#include <bitset>#include <iostream>
int main(){
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in octal: " << std::oct << 42 << '\n'
<< "The number 42 in decimal: " << std::dec << 42 << '\n'
<< "The number 42 in hex: " << std::hex << 42 << '\n';
// Note: there is no I/O manipulator that sets up a stream to print out
// numbers in binary format (e.g. bin). If binary output is necessary
// the std::bitset trick can be used:
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in binary: " << std::bitset
<http://en.cppreference.com/w/cpp/utility/bitset><8>{42} << '\n';
}
With a std::bin manipulator:
#include <iostream>#include <sstream>
int main(){
// This yields 101010
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in binary: " << std::
<http://en.cppreference.com/w/cpp/utility/bitset>bin << 42 << '\n';
}
It would also take advantage of other manipulators, like std::setw and
std::setfill:
#include <iostream>#include <sstream>
int main(){
// This yields *00*101010
std::cout <http://en.cppreference.com/w/cpp/io/cout> << std::setw
<http://en.cppreference.com/w/cpp/io/manip/setw>(8) <<
std::setfill('0');
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The number 42 in
binary: " << std:: <http://en.cppreference.com/w/cpp/utility/bitset>bin <<
42 << '\n';
}
Reading binary numbers would also be addressed by the input streams.
IF this proposal is considered, I see changes in:
- A new bin flag in ios_base::basefield.
- Support for the flag in ios_base::setf, ios_base::unsetf and
ios_base::flags member functions.
- Creation of the manipulator (similar to other manipulators) for the
different char_traits
- Support for binary parsing for input streams
- Support for binary output for ostreams.
std::ios_base in cppreference.com:
https://en.cppreference.com/w/cpp/io/ios_base
Integer I/O manipulators
https://en.cppreference.com/w/cpp/io/manip/hex
Regards,
—Javier
well know, the standard manipulators are std::oct, std::dec, std::hex,
which is essentially a format flag onto ios_base::basefield.
Having a dedicated manipulator would close that gap and would eliminate the
current "trick" of using std::bitset. The (abbreviated) example in
cppreference .com reads:
#include <bitset>#include <iostream>
int main(){
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in octal: " << std::oct << 42 << '\n'
<< "The number 42 in decimal: " << std::dec << 42 << '\n'
<< "The number 42 in hex: " << std::hex << 42 << '\n';
// Note: there is no I/O manipulator that sets up a stream to print out
// numbers in binary format (e.g. bin). If binary output is necessary
// the std::bitset trick can be used:
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in binary: " << std::bitset
<http://en.cppreference.com/w/cpp/utility/bitset><8>{42} << '\n';
}
With a std::bin manipulator:
#include <iostream>#include <sstream>
int main(){
// This yields 101010
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The
number 42 in binary: " << std::
<http://en.cppreference.com/w/cpp/utility/bitset>bin << 42 << '\n';
}
It would also take advantage of other manipulators, like std::setw and
std::setfill:
#include <iostream>#include <sstream>
int main(){
// This yields *00*101010
std::cout <http://en.cppreference.com/w/cpp/io/cout> << std::setw
<http://en.cppreference.com/w/cpp/io/manip/setw>(8) <<
std::setfill('0');
std::cout <http://en.cppreference.com/w/cpp/io/cout> << "The number 42 in
binary: " << std:: <http://en.cppreference.com/w/cpp/utility/bitset>bin <<
42 << '\n';
}
Reading binary numbers would also be addressed by the input streams.
IF this proposal is considered, I see changes in:
- A new bin flag in ios_base::basefield.
- Support for the flag in ios_base::setf, ios_base::unsetf and
ios_base::flags member functions.
- Creation of the manipulator (similar to other manipulators) for the
different char_traits
- Support for binary parsing for input streams
- Support for binary output for ostreams.
std::ios_base in cppreference.com:
https://en.cppreference.com/w/cpp/io/ios_base
Integer I/O manipulators
https://en.cppreference.com/w/cpp/io/manip/hex
Regards,
—Javier
Received on 2025-02-10 18:01:22