C++:将char*中的十六进制解释为uint8_t

Ros*_*han 1 c++ hex char

我需要有一个以下格式的char*,它有一些十六进制值.

char *buf = new char(12);
buf[0] = 0x2;
buf[1] = 0x0;
buf[2] = 0x3;
buf[3] = 0x3;
buf[4] = 0x0;
buf[5] = 0x0;
buf[6] = 0x6;
buf[7] = 0x4;
buf[8] = 0x0;
buf[9] = 0x2;
buf[10] =0x0;
buf[11] =0x0;
Run Code Online (Sandbox Code Playgroud)

当我尝试以这种方式打印它们时 -

std::string hex_string;
create_hex_str((uint8_t*)buf, 12, hex_string);
std::cout << hex_string;
Run Code Online (Sandbox Code Playgroud)

打印功能的定义:

void create_hex_str(uint8_t *data, int len, std::string &tgt)
{
    std::stringstream ss;
    ss << std::hex << std::setfill('0');
    ss << "\n";
    for (int i=0; i<len; i++)
    {
        ss << std::setw(2) << static_cast<unsigned>(data[i]) << " ";        
    }
    target = ss.str();
}
Run Code Online (Sandbox Code Playgroud)

我得到完全不同的输出:f0 a1 56 08 28 02 3c f6 40 f8 56 08

有人可以帮帮我吗?如果这是一个非常微不足道的问题,我很抱歉,但我可能根本不明白这里发生了什么.我究竟做错了什么?我必须将字节数组表示为char*.

Mik*_*our 5

new char(12);
Run Code Online (Sandbox Code Playgroud)

为单个字符分配内存并使用值12初始化它.[]用于分配数组:

new char[12];
Run Code Online (Sandbox Code Playgroud)

但只有new[]在你真正需要动态分配时才使用; 如果你只需要一个代码块中的数组,那么使用一个自动的:

char buf[12];
Run Code Online (Sandbox Code Playgroud)

如果你真的需要new[],那么记得在你完成它之后删除它(delete[]不仅仅是delete).更好的是,使用RAII类型,如std::stringstd::vector<char>管理阵列.