【发布时间】:2019-06-07 09:52:57
【问题描述】:
我正在研究将数据编码到缓冲区的函数。我已经有了编码部分的功能。
我正在编码,然后我推回一个 uint8_t 向量,这是我的输出缓冲区。 对于整数我没有问题,我使用我的函数并且一切都完成了,但是现在我必须编码一个字符串。
在我之前已经有一些开发人员制作了一个函数,它以 char**(要填充的缓冲区)、size_t* 和 char* 作为参数,这是我要编码的字符串。
对于 char *,我只是在 C++ 对象中使用我的字符串执行 .c_str(),但我不知道如何处理要填充的缓冲区,因为我实际上使用的是 uint8_t 向量。
我考虑过创建一个临时缓冲区,然后通过强制转换将其推入向量中,这是一个好方法吗?
这是我的班级(母班是虚拟的,但字符串在这里,所以我给你看这个):
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)
【问题讨论】:
-
很难理解您想要实现的目标,但 “我考虑过创建一个临时缓冲区,然后通过强制转换将其推入向量中” 听起来很糟糕。实际上你的“编码部分”看起来很错误。请edit您的问题并添加
EncodeSmallString的原型。 -
代码确实不正确。您不能将输出定义为参考,也不能对其进行设置。不能将输出作为
EncodeSmallString(output)函数的引用传递吗?