在 C++ 中打印出字节流

Posted

技术标签:

【中文标题】在 C++ 中打印出字节流【英文标题】:Printing out byte stream in C++ 【发布时间】:2013-06-15 16:51:28 【问题描述】:

在这个站点的帮助下,C++ int to byte array,我有一个将 int 序列化为字节流的代码。

整数值 1234 的字节流数据是大端格式的 '\x00\x00\x04\xd2',我需要想出一个实用函数来显示字节流。这是我的第一个版本。

#include <iostream>
#include <vector>

using namespace std;

std::vector<unsigned char> intToBytes(int value)

    std::vector<unsigned char> result;
    result.push_back(value >> 24);
    result.push_back(value >> 16);
    result.push_back(value >>  8);
    result.push_back(value      );
    return result;


void print(const std::vector<unsigned char> input)

    for (auto val : input)
        cout << val; // <-- 


int main(int argc, char *argv[]) 
    std::vector<unsigned char> st(intToBytes(1234));
    print(st);

如何在屏幕上获得正确的十进制和十六进制值?

【问题讨论】:

使用std::hex() IO 操纵器 【参考方案1】:

十六进制:

for (auto val : input) printf("\\x%.2x", val);

十进制:

for (auto val : input) printf("%d ", val);

【讨论】:

+1,尽管我几乎可以保证有人会因为使用 C 风格的 printf 而不是 C++ 流而对你进行标记。即使对于这种事情 printf 解决方案更清晰...... 谢谢。甚至 Google C++ 代码风格指南也推荐 printf 反对 std::cout,我个人同意。 确实如此,虽然它这样做并不是因为一个明显优于另一个,而仅仅是因为他们必须选择一些东西...... 你不应该使用%02x而不是%.2x吗? 对于整数说明符,它是相同的。我只是习惯了%.2x,但可能%02x 更不言自明。

以上是关于在 C++ 中打印出字节流的主要内容,如果未能解决你的问题,请参考以下文章

将无符号字节流转换为有符号字节流 Golang

在 C# 中解析原始协议缓冲区字节流

Java—IO流 字节流

如何高效的使用IO流?字节流字符流缓冲流序列化对象流打印流全整理

c++ 基本的输入输出

Java之IO流---字节流