【发布时间】:2019-03-15 01:12:32
【问题描述】:
我注意到虽然标准库有 I/O 操纵器来打印十进制、十六进制或八进制形式的数字 (std::dec, std::hex, std::oct),但它没有用于二进制的。
我将如何实现一个类似的二进制 I/O 操纵器?
反重复标记部分:我很失望我必须这样做,但我的问题几乎总是被标记为完全不同且无用的问题的重复。也许这将帮助人们远离虚假重复并找到真正的重复(如果确实存在)。
- 我知道如何打印数字的二进制表示。对于任何知道数字如何存储在计算机中的人来说,这是一项微不足道的任务,而不是这个问题的目的(即实现
std::string to_binary(T value)、void print_binary(T value),...)。 - 我知道任何记住十六进制值的人都可以很容易地在头脑中从十六进制转换为二进制。但是任何时候你引入人类工作,你就引入了人类犯错的能力。如果可能,最好尽量避免。
- 我意识到在扩展标准库方面允许您做什么是有规则的,尽管我不太了解流和操纵器的内部工作原理,无法确切知道在这种情况下允许做什么。我不是在寻找一个“你不能那样做”的逃避答案 - 如果无法创建 exact 模拟,那么给我你能想到的最干净的允许解决方案是允许。
【问题讨论】:
-
绝对看起来像一个起点。我现在正在从那里开始工作,但从那里到这里绝对是一个不平凡的扩展。
-
我认为
bitset绝对是一个合理的考虑,因为我目前的方法是多么的老套。我看到的唯一问题是他们使用硬编码大小对其进行模板化,希望这不是必需的。 -
确认的硬编码大小对于bitset不是必需的,可以使用
8 * sizeof(var)进行模板化。