Date: Mon, 10 Feb 2025 12:31:25 -0600
Hi,
I would be surprised if this hasn’t been proposed before. Now that we have
std::format, I think it’s hard to make an argument for adding anything
formatting-related to iostreams.
Cheers,
Jeremy
On Mon, Feb 10, 2025 at 12:01 Javier Estrada via Std-Proposals <
std-proposals_at_[hidden]> wrote:
> 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
>
>
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
I would be surprised if this hasn’t been proposed before. Now that we have
std::format, I think it’s hard to make an argument for adding anything
formatting-related to iostreams.
Cheers,
Jeremy
On Mon, Feb 10, 2025 at 12:01 Javier Estrada via Std-Proposals <
std-proposals_at_[hidden]> wrote:
> 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
>
>
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
Received on 2025-02-10 18:31:39