将数组转换为字符串uint8_t



我有一个结构,它有一个类型为unsigned int array(uint8_t) 的成员,如下所示

typedef uint8_t  U8;
typedef struct {
/* other members */
U8 Data[8];
} Frame;

收到指向Frame类型变量的指针,在调试期间我在 VS2017 的控制台中看到如下

/* the function signatur */
void converter(Frame* frm){...}
frm->Data   0x20f1feb0 "6þx}x1òà...   unsigned char[8] // in debug console

现在我想将其分配给一个 8 字节的字符串

我像下面一样做了,但它连接了数组的数值并产生类似"541951901201251242224"

std::string temp;
for (unsigned char i : frm->Data)
{
temp += std::to_string(i);
}

还尝试了引发异常const std::string temp(reinterpret_cast<char*>(frm->Data, 8));

在原始演员表中const std::string temp(reinterpret_cast<char*>(frm->Data, 8));您将右括号放在错误的位置,因此它最终会reinterpret_cast<char*>(8),这就是崩溃的原因。

修复:

std::string temp(reinterpret_cast<char const*>(frm->Data), sizeof frm->Data);

只需留下std::to_string即可。它将数值转换为其字符串表示形式。所以即使你给它一个char,它也只会把它转换为一个整数,并将其转换为该整数的数字表示。另一方面,只需使用+=std::string添加char就可以正常工作。试试这个:

int main() {
typedef uint8_t  U8;
U8 Data[] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
std::string temp;
for (unsigned char i : Data)
{
temp += i;
}
std::cout << temp << std::endl;
}

有关std::string+=运算符的更多信息和示例,请参见此处。

相关内容

  • 没有找到相关文章

最新更新