【问题标题】:std::cout gives different output from qDebugstd::cout 从 qDebug 给出不同的输出
【发布时间】:2015-02-03 17:52:38
【问题描述】:

我正在使用 Qt,我有一个 unsigned char *bytePointer 并想打印出当前字节的数值。下面是我的代码,它旨在给出我从连接到计算机的机器接收到的连续字节的 int 值和十六进制值:

int byteHex=0;
byteHex = (int)*bytePointer;

qDebug << "\n  int: " //this is the main issue here. 
          << *bytePointer;

std::cout << " (hex:  "
          << std::hex
          << byteHex
          << ")\n";

}

这给出了完美的结果,并且我得到了实际的数字,但是这段代码将进入 API,我不想使用 Qt-only 函数,例如 qDebug。所以当我尝试这个时:

int byteHex=0;
byteHex = (int)*bytePointer;

std::cout << "\n  int: " //I changed qDebug to std::cout
          << *bytePointer;

std::cout << " (hex:  "
          << std::hex
          << byteHex
          << ")\n";

}

输出确实完美地给出了十六进制值,但是 int 值返回符号(如 ☺、└、§ 等)。

我的问题是:如何让std::cout 提供与qDebug 相同的输出?

编辑:由于某种原因,这些符号只出现在特定的 Qt 设置中。我不知道为什么会这样,但现在已经解决了。

【问题讨论】:

  • 请注意,这将工作一次,然后cout 卡在十六进制模式,因为你没有重置它。
  • 它是 Qt 应用程序吗?如果是,为什么不使用 qDebug?如果没有,你为什么更早使用它?
  • @SebastianRedl 实际上是问题所在。之后我只是没有添加 std::dec 。我很尴尬,但谢谢!
  • @lpapp 现在它在 Qt 中,但我现在将它移动到 Visual Studio,因为它是 API 的一部分。
  • There are tricks and you could also use qInstallMsgHandler。甚至还有一个适用于 Visual Studio 的 Qt 插件,包括 Qt 4 和 Qt 5。你到底面临什么问题?

标签: c++ qt cout qtcore qdebug


【解决方案1】:

标准输出流会将任何字符类型输出为字符,而不是数值。输出数值,转换为非字符整数类型:

std::cout << int(*bytePointer);

【讨论】:

  • 或者再次byteHex。该变量只是命名错误。
  • 我认为自从我使用 std::hex 之后,由于某些奇怪的原因,它使 *bytePointer 也是一个十六进制值。所以这两个值最终都是十六进制的。如果我删除std::hex,它们都将变为整数值。
  • @SebastianRedl 是的,我猜它的名字有点不对;我只是这样命名它,因为这是我将仅用于十六进制代码的变量。
  • 要将 cout 恢复为十进制数,请使用 cout
  • 感谢您的帮助,但这不一定是答案,所以我不会将其标记为一个,但我确实给予了支持:P
【解决方案2】:

正如其他人在评论中指出的那样,您将输出更改为十六进制,但实际上并没有将其设置回此处:

std::cout << " (hex:  "
          << std::hex
          << byteHex
          << ")\n";

之后你需要应用这个:

std::cout << std::dec;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2011-07-08
    相关资源
    最近更新 更多