以下函数用于将其参数(整数)从十进制转换为八进制。
std::string dec_to_oct(int num) {
std::string output;
for(int i=10; i>=0; --i) {
output += std::to_string( (num >> i*3) & 0b111 );
}
return output;
}
适用于任何正面输入,但num = -1
返回77777777777
时应返回37777777777
,因此第一个数字需要为3
一个7
。为什么会这样?对于所有负输入,该功能似乎不正确。如何调整算法以使其正确返回负数?
注意:这是一项CS任务,所以我很欣赏提示/技巧。
答案 0 :(得分:2)
这是因为算术移位保留了数字的符号。为了克服这个问题,首先将输入整数转换为等效的无符号类型。
uint8_t*
更进一步,您可以使函数模板化并将指针强制转换为sizeof
的输入,使用include_top=False
计算八进制数字的数量(由DanielH建议)。然而,由于某个数字的位可能会延伸超过两个字节,因此会更复杂一些。
答案 1 :(得分:0)
<强>的ios_base&安培; oct(ios_base&amp; str);
使用八进制基础为 str 流设置 basefield 格式标志 到 oct 。
示例
// modify basefield #include <iostream> // std::cout, std::dec, std::hex, std::oct int main () { int n = 70; std::cout << std::dec << n << '\n'; std::cout << std::hex << n << '\n'; std::cout << std::oct << n << '\n'; return 0; }
70 46 106
所以,你要重新发明轮子。