【问题标题】:How to print unsigned char array by cout? [duplicate]如何通过 cout 打印 unsigned char 数组? [复制]
【发布时间】:2018-09-18 13:02:49
【问题描述】:

我有无符号字符数组。我想使用 cout 打印所有数组值。 我该怎么做?

rtc::ZeroOnFreeBuffer<unsigned char> charArray(key_len * 2 + salt_len * 2);

cout<< charArray; --> ?

【问题讨论】:

  • 使用循环遍历它并打印每个值?

标签: c++ char


【解决方案1】:
for (auto&& c : charArray){
    cout << c;
}

可能是最简单的方法,假设您想要实际的字符而不是数字(如果您想要数字,则将 auto&amp;&amp; 替换为 int),并且您的容器是可迭代的。

【讨论】:

  • 如果首选整数值,则cout &lt;&lt; static_cast&lt;int&gt;(c) &lt;&lt; ' ';
  • @Eljay:我更喜欢我的方式 ;-)
  • 第二次阅读,是的,如果强调整数值而不是字符关联,我同意你使用int 而不是auto&amp;&amp;。你的代码更简洁。两者都是自记录代码。我会在代码审查中将我的代码更改为您的解决方案。
  • 问题@Bathsheba:为什么auto&amp;&amp; 而不是const auto&amp;
  • @rsjaffe:我知道这有点傲慢,但我喜欢将这些东西隐藏在我的答案中。见stackoverflow.com/questions/26991393/…
【解决方案2】:

假设你使用的是ZeroOnFreeBuffer from WebRTC,你可以使用for循环,获取当前缓冲区的大小:

size_t bufSize = charArray.size()
for (int i = 0; i < bufSize; i++){
    cout << charArray[i];
}

无论如何,您如何访问数据并对其进行迭代取决于ZeroOnFreeBuffer 的性质。查看该对象的文档,它会为您提供访问数据的方法,查找缓冲区的大小,甚至可能如何获取诸如 range-for 循环之类的迭代器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 2012-04-15
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多