gpt4 book ai didi

c++ - 如何将 Char** 插入 uin8_t vector ?

转载 作者:行者123 更新时间:2023-11-28 04:16:27 27 4
gpt4 key购买 nike

我正在研究将数据编码到缓冲区中的函数。我已经有了编码部分的功能。

我正在编码,然后推回 uint8_t vector ,这是我的输出缓冲区。对于整数我没有问题,我使用我的函数并且一切都完成了,但现在我必须编码一个字符串。

在我之前已经有一些开发人员制作了一个函数,它以 char**(要填充的缓冲区)、size_t* 和 char* 作为参数,这是我要编码的字符串。

对于 char *,我只是用我的 C++ 对象中的字符串执行 .c_str(),但我不知道如何处理要填充的缓冲区,因为我实际上使用的是 uint8_t vector 。

我考虑创建一个临时缓冲区,然后通过强制转换将其插入 vector ,这是一个好方法吗?

这是我的类(母类是虚拟的,但字符串在这里,所以我给你看这个):

class CDnsMessage
{
public:
CDnsMessage();
virtual ~CDnsMessage();

virtual void GetSize() = 0;

uint32_t m_ttl;
eDnsClass m_class;
eDnsType m_type;
std::string m_domain;
uint8_t m_sizeDnsCorpse;
uint8_t m_sizeDomainName;
};

编码部分:

std::vector<uint8_t>& output
char * buffer;
std::size_t* bufsz;
EncodeSmallString(*buffer,*bufsz,RR_A_msg->m_domain.c_str());
output.push_back((uint8_t)buffer)

最佳答案

编码部分需要看起来像

char* buffer;
std::size_t bufsz;
EncodeSmallString(&buffer, &bufsize, RR_A_msg->m_domain.c_str());

(您传入缓冲区指针和大小的地址,函数将为您分配缓冲区。)

现在您需要将临时缓冲区复制到您的输出中。这不是强制转换,这是复制每个字节的问题。这是 C++,有无数种方法可以做到这一点,但像这样:

for (std::size_t i = 0; i<bufsiz;i++) {
output.push_back(static_cast<uint8_t>(buffer[i]));
}

会起作用(您也可以使用 std::copystd::vector::insert)。

最后,您需要释放临时缓冲区。您必须查看 EncodeSmallString 的文档以了解如何执行此操作 - 最可能的答案是 freedelete[],具体取决于它是用 malloc 还是 new [] 分配的。

我很想根据附加到 vector 的方式重写 EncodeSmallString,然后编写一个包装器重载(使用现有签名),例如:

void EncodeSmallString(char** pbuf, std::size_t* pbufsiz, const char* txt) {
std::vector<uint8_t> temp;
EncodeSmallString(temp, txt);
*pbufsiz = temp.size();
*pbuf = malloc(*pbufsiz); // or new or whatever the existing code uses.
// add error handling to taste
std::copy(*pbuf, temp.begin(), temp.end());
}

关于c++ - 如何将 Char** 插入 uin8_t vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56492036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com