如何使用C++中的setiosflags将十进制数打印为八进制数

3

我已经尝试过这个

cout. setf(ios::oct, ios::basefield) ;
cout << 79 << endl;

它可以工作,但是使用操作器setiosflags

cout << setiosflags (ios::oct) << 79 << endl;

无法正常工作,屏幕上仍然打印出 79。
虽然听说 setiosflags 是 `setf` 的替代方案。

那么如何使用 setiosflags 将十进制数打印成八进制数呢?


“it doesn't work”的意思是什么?如果你遇到编译错误,你必须在问题中包含它们。 - 463035818_is_not_a_number
1
我改变了主意,投票支持重新开放这个问题。我认为这对于未来研究该问题是有用的。 - πάντα ῥεῖ
4个回答

6

保持简单和愚蠢(或简称KISS):

std::cout << std::oct << 79 << std::endl;

std::octstr.setf(std::ios_base::oct, std::ios_base::basefield)的语法糖,这是强制流以八进制表示整数值的一种方式之一(正如你所注意到的)。

在线查看


4
您需要先使用std::resetiosflags重置标志位:
#include <iostream>
#include <iomanip>

int main()
{
  int x = 42;
  std::cout << std::resetiosflags(std::ios_base::dec)
            << std::setiosflags(std::ios_base::hex | std::ios_base::showbase)
            << x;
}

| std::ios_base::showbase 部分是可选的。


你能简要解释一下 @Ron,为什么我们需要使用 resetiosflags 吗? - S M Tushar Ibne Salam

0

你也可以使用

 printf("%o",79);

3
楼主明显询问的是关于 C++ 的输入输出操作符。你的答案并没有涉及到这个问题。 - πάντα ῥεῖ
1
@πάνταῥεῖ 采用这种方法,我的答案也应该被踩,因为它没有使用 std::setiosflags - Yksisarvinen
1
@Yksisarvinen,但是你的回答展示了如何使用I/O操作符。 - πάντα ῥεῖ

0

只需尝试这个,您的问题将得到解决。 cout << hex << 79; cout << oct << 79;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接