作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
string convert_binary_to_hex(string binary_value, int number_of_bits)
{
bitset<number_of_bits> set(binary_value);
ostringstream result;
result << hex << set.to_ulong() << endl;
return result.str();
}
在上面的方法中,我将二进制字符串转换为十六进制字符串。由于十六进制值是 4 位,number_of_bits
变量需要是 4 的倍数,因为对于我正在编写的应用程序,binary_value
的范围可能在 4 位到 256 位之间.
如何让 bitset 的大小可变?
我的导入:
#include <stdio.h>
#include <iostream>
#include <string>
#include <bitset>
#include <sstream>
最佳答案
你不能。像这样的模板参数需要在编译时知道,因为编译器需要根据传递的值生成不同的代码。
在这种情况下,您可能想要遍历字符串并自己构建值,例如
unsigned long result = 0;
for(int i = 0; i < binary_value.length(); ++i)
{
result <<= 1;
if (binary_value[i] != '0') result |= 1;
}
它还假设您的结果比长的短,并且不会容纳 256 位值 - 但您的示例代码也不会。你需要一个大数字类型。
关于c++ - "Cannot appear in a constant expression",我需要它作为一个变量,为什么它不让我这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341396/
我是一名优秀的程序员,十分优秀!