【问题标题】:How do i write this in cout/c++?我如何在 cout/c++ 中写这个?
【发布时间】:2012-07-30 17:16:10
【问题描述】:

如何使用 cout 编写以下函数?我的主要目的是在我知道如何将它与 cout 一起使用之后将所有值实际打印到文件中。 std::hex 不起作用!

void print_hex(unsigned char *bs, unsigned int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%02x", bs[i]);
        //Below does not work
        //std::cout << std::hex << bs[i];
    }

}

编辑:

cout 打印出诸如 r9{èZ[¶ôÃ

【问题讨论】:

  • “不起作用”作为诊断信息是无用的。它的作用是什么,这与您预期的有何不同?
  • “不起作用”是什么意思。当您尝试使用 std::hex 时会发生什么?
  • 加上

标签: c++ string hex cout


【解决方案1】:

我认为向 int 添加强制转换可以满足您的要求:

#include <iostream>
#include <iomanip>

void print_hex(unsigned char *bs, unsigned int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        std::cout << std::hex << static_cast<int>(bs[i]);
    }

}

int main() {
  unsigned char bytes[] = {0,1,2,3,4,5};
  print_hex(bytes, sizeof bytes);
}

这需要强制它以数字形式打印,而不是您所看到的字符。

【讨论】:

  • 可能需要改为使用 std::cout &lt;&lt; std::setw(2) &lt;&lt; std::setfill('0') &lt;&lt; std::hex 来获得小于 16 的整数所需的行为。
  • @dupdupdup:所以检查它作为接受的答案。 Flexo 可能会比感谢更欣赏声誉(尽管两者都很好),未来任何来这里寻找这个问题答案的人都会真的感谢将它标记出来。
  • @DragoonWraith 供您参考,需要一段时间才能检查。我确实检查了我所有问题的答案。 :)
  • @dupdupdup:我忘了;以为你刚刚忘记了。那么对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2013-05-21
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多