std::hex 不能像我预期的那样工作

Lei*_*and 3 c++

我不习惯 C++,所以请耐心等待...

从设备读取两个字节并进入缓冲区。然后就可以打印了。

下面的代码应该返回字符串“0x204D”但是,它返回“0x M”,十六进制为 30 78 20 4d

所以十六进制没有被解码为ascii。

void vito_unit::decodeAsRaw(unsigned char *buffer, int bufferLen)
{
    std::stringstream *decodedClearText;
    decodedClearText = new std::stringstream;

    *decodedClearText << "0x" << std::hex;

    for (int i=0; i<bufferLen; i++) {
            *decodedClearText << buffer[i];
    }
    setValue(decodedClearText->str());
}
Run Code Online (Sandbox Code Playgroud)

应该怎么做?

Lig*_*ica 5

这与std::hex.

当您流式传输 a 时[signed/unsigned] char,将使用其 ASCII 表示,因为这通常是chars所期望的。

您可以通过将数字转换为int. 然后将触发以十六进制表示法(即)呈现数字的功能std::hex

您还应该修复内存泄漏和不必要的动态分配:

void vito_unit::decodeAsRaw(unsigned char const* const buffer, int const bufferLen)
{
    std::stringstream decodedClearText;
    decodedClearText << "0x" << std::hex;

    for (int i = 0; i < bufferLen; i++) {
       decodedClearText << +buffer[i];
    }

    setValue(decodedClearText.str());
}
Run Code Online (Sandbox Code Playgroud)

一元“+”对 进行积分提升int