如果您可以在编译时知道大小,则也将您的方法设为模板,否则您将需要使用std::vector<bool>实际上专门用于仅使用一位的模板bool,但您必须ulong手动使用 or 和 bitshifts 构建。
//template version
template <size_t number_of_bits>
string convert_binary_to_hex(string binary_value) {
bitset<number_of_bits> set(binary_value);
ostringstream result;
result << hex << set.to_ulong() << endl;
return result.str();
}
但是,既然您已经假设 aulong将足够大以容纳位数,并且如果您给出的代码有太多位,它不会有什么不同,为什么不把它的大小设置为一个ulong?
//reuses ulong assumption
string convert_binary_to_hex(string binary_value) {
bitset<sizeof(ulong)> set(binary_value);
ostringstream result;
result << hex << set.to_ulong() << endl;
return result.str();
}
或者你可以只有 2 个函数,一个执行 4 位数字的实际转换,另一个使用该函数来建立任意长度的数字:
string convert_nibble_to_hex(string binary_value) {
bitset<4> set(binary_value);
ostringstream result;
result << hex << set.to_ulong() << endl;
return result.str();
}
string convert_binary_to_hex(string binary_value) {
//call convert_nibble_to_hex binary_value.length()/4 times
//and concatenate results
}