我不习惯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());
}
应该怎么做?
最佳答案
这与std::hex
无关。
流[signed/unsigned] char
时,将使用其ASCII表示形式,因为通常这是char
所期望的。
您可以通过将数字转换为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());
}
一元“+”对
int
执行完整的提升。