【问题标题】:Convert Char array to uint8_t vector将 Char 数组转换为 uint8_t 向量
【发布时间】:2026-02-06 21:35:01
【问题描述】:

对于某些项目,我需要发送编码消息,但我只能提供要发送的 uint8_t 向量,并且我有一个 char 数组(其中包含我转换为十六进制的数字和字符串)和数组上的指针。我将作为对象的 msg 编码到缓冲区中,然后我必须发送它并对其进行解码等。

char buffer[1024]
char *p = buffer
size_t bufferSize = sizeof(buffer)
Encode(msg,p,bufferSize)

std::vector<uint8_t> encodedmsg; //here i need to put my message in the buffer
Send(encodedmsg.data(),encodedmsg.size()) //Only taking uint8_t vector

这里是发送的原型:

uint32_t Send(const uint8_t * buffer, const std::size_t bufferSize)                                                                         

我已经看过一些问题,但没有人必须在向量中替换它或转换为 uint8_t。 我考虑过 memcpy 或重新解释演员表,或者可能使用 for 循环,但我真的不知道如何在没有任何损失的情况下做到这一点。

谢谢,

【问题讨论】:

    标签: c++ vector char type-conversion


    【解决方案1】:

    实际上,您的代码表明Send() 函数将指针指向uint8_t,而不是std::vector&lt;uint8_t&gt;。 由于charuint8_t 具有相同的内存大小,您可以这样做:

    Send(reinterpret_cast<uint8_t*>(p), bufferSize);
    

    但是,如果您想“正确”地做所有事情,则可以这样做:

    encodedmsg.resize(bufferSize);
    std::transform(p, p + bufferSize, encodedmsg.begin(), [](char v) {return static_cast<uint8_t>(v);});
    

    【讨论】:

    • 非常感谢我会尝试,实际上我做了“ std::vector encodedmsg(buffer, buffer + bufferSize / sizeof(char)); ”但显然不起作用。
    • 这样我可以在我的发送函数中使用 v.data() 和 v.size() 吗?
    • 有趣...std::vector&lt;uint8_t&gt; encodedmsg(buffer, buffer + bufferSize / sizeof(char)); 也应该可以工作。你确定你需要发送整个bufferSize 数据,而不是Encode() 重复的其他值吗? “不工作”到底是什么意思?
    • 是的,当然,当您准备好矢量时,您可以在任何地方使用 v.data() 和 v.size()。
    • 首先在使用调整大小转换方式时出现 3 个错误:错误:“[”标记之前的预期主表达式错误:“]”之前的预期主表达式标记“char”之前的预期主表达式