使用非const变量代替所需的const变量(C )

Use non-const variable in place of required const variable (C++)

本文关键字:变量 const      更新时间:2023-10-16

我正在编写的程序的一部分涉及获取整数列表(例如15、18、25),并将每个整数转换为二进制。我在列表中迭代,并使用以下代码转换每个代码:

std::string binary = std::bitset<8>(v).to_string();

((v)是我要转换的整数)
但是,这条代码行的问题在于它定义了输出的二进制字符串的长度,因此2将变成" 00000010",而31将变成" 00011111",我当然不能变得太低,否则我会遇到一些麻烦数字较大,但我希望每个二进制字符串的长度等于真实的二进制数(2是" 10",31是" 11111")。我有这样的理由。
因此,我尝试用我试图根据以下代码转换的数字更改的int替换&lt; 8>:

int length_of_binary;
        if (v <= 1) {
            length_of_binary = 1;
        }
        else if (v <= 3) {
            length_of_binary = 2;
        }
        else if (v <= 8) {
            length_of_binary = 4;
        }
        else if (v <= 16) {
            length_of_binary = 5;
        }
        else if (v <= 32) {
            length_of_binary = 6;
        }
std::string binary = std::bitset<length_of_binary>(v).to_string();

问题在于,当悬停在(现在波动的)变量length_of_binary上时,我会遇到以下错误:
"+5 overloads. expression must have a constant value."

和该程序不会编译。我什至尝试通过分配欺骗编译器Length_of_binary对const int的值,但仍然无法正常工作。
有办法解决此问题吗?如果没有,有一块代码/功能会给我我的需求吗?

如评论中所述:您面临的问题是,该值需要在编译时知道该值(而不是依赖运行时)。

因此,您可以使用固定的表示形式,例如std::bitset<N>像已经完成一样将其转换为字符串,然后修剪领先的零。可以这样实现:

std::string text = std::bitset<8>(25).to_string(); // binary representation
text.erase(0, text.find_first_not_of('0')); // zeroes trimmed
std::cout << text; // prints out: 11001

请注意,这只是一个示例。您仍然必须处理0的情况,并考虑您的输入数据是否不会超过8位表示。

尽管如此,使用这种方法,您不需要length_of_binary变量和相关的if-else节 - 这简化了很多。