在 C++ 中打印出字节流

pro*_*eek 2 c++ format int data-conversion

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

来自整数值 1234 的字节流数据是 big endian 格式的 '\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);
}
Run Code Online (Sandbox Code Playgroud)

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

nul*_*ptr 9

对于十六进制:

for (auto val : input) printf("\\x%.2x", val);
Run Code Online (Sandbox Code Playgroud)

对于十进制:

for (auto val : input) printf("%d ", val);
Run Code Online (Sandbox Code Playgroud)

  • +1,尽管我几乎可以保证有人会因为您使用 C 样式的 printf 而不是 C++ 流而标记您。即使对于这种事情, printf 解决方案更清晰...... (2认同)