C++ 在C+中打印出字节流+;

C++ 在C+中打印出字节流+;,c++,format,int,data-conversion,C++,Format,Int,Data Conversion,在这个站点的帮助下,我有了一个将int序列化为字节流的代码 整数值1234中的字节流数据是“\x00\x00\x04\xd2”的big-endian格式,我需要一个实用函数来显示字节流。这是我的第一个版本 #include <iostream> #include <vector> using namespace std; std::vector<unsigned char> intToBytes(int value) { std::vector&l

在这个站点的帮助下,我有了一个将int序列化为字节流的代码

整数值1234中的字节流数据是“\x00\x00\x04\xd2”的big-endian格式,我需要一个实用函数来显示字节流。这是我的第一个版本

#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;
标准::向量整数字节(整数值)
{
std::向量结果;
结果。推回(值>>24);
结果。推回(值>>16);
结果。推回(值>>8);
结果。推回(值);
返回结果;
}
无效打印(常量标准::矢量输入)
{
用于(自动val:输入)
十六进制的cout:

for (auto val : input) printf("\\x%.2x", val);
对于十进制:

for (auto val : input) printf("%d ", val);
对于十六进制:

for (auto val : input) printf("\\x%.2x", val);
对于十进制:

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

使用
std::hex()
IO操纵器或使用
std::hex() IO操作器+1,虽然我几乎可以保证有人会用C样式的Prtf而不是C++流来标记你。即使对于这种事情,PrtTF解决方案更清晰…谢谢。即使谷歌C++代码风格指南推荐<代码> Prtff  > <代码> STD::CUT,我个人同意。是的,虽然这不是因为一个明显优于另一个,而是因为他们必须选择一些东西…你不应该使用
%02x
而不是
%.2x
?对于整数说明符,这是一样的。我只是习惯了
%.2x
,但可能
%02x
更能自我解释。+1,尽管我可以N几乎保证了某人会使用C样式的Prtf而不是C++流。即使对于这种情况,PrtTF解决方案更清晰…谢谢。即使谷歌C++代码风格指南推荐<代码> Prtff <代码>反对<代码>:ST::CUT,我个人同意。确实如此,尽管它不是BECA。使用一个显然比另一个好,但仅仅是因为他们必须选择一些东西……你不应该使用
%02x
而不是
%.2x
?对于整数说明符,这是一样的。我只是习惯了
%.2x
,但可能
%02x
更能自我解释。