将Char数组转换为uint8_t向量

时间:2019-07-12 07:12:51

标签: c++ vector char type-conversion

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

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

这是send的原型:

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

我已经看过一些问题,但是没有人必须将其替换为向量或转换为uint8_t。 我以为可以回传memcpy或重新解释演员表,或者可以使用for循环,但是我真的不知道如何避免损失。

谢谢

1 个答案:

答案 0 :(得分:3)

实际上,您的代码建议Send()函数使用指向uint8_t而不是std::vector<uint8_t>的指针。 而且由于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);});