C++ C++;:向量<;字符串>;到字符数组

C++ C++;:向量<;字符串>;到字符数组,c++,C++,我正在创建基本ldap服务器作为学校项目。我将ldap消息作为vector searchResDone发送到客户端(bindResponse、searchResEntry、searchResDone) 声明: vector<char> searchResDone = {0x30, 0x0c, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0a, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00}; void sendResponse(int n

我正在创建基本ldap服务器作为学校项目。我将ldap消息作为
vector searchResDone发送到客户端(bindResponse、searchResEntry、searchResDone)

声明:

vector<char> searchResDone = {0x30, 0x0c, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0a, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
void sendResponse(int newsock, char response[], int msg_size){
  int i = write(newsock,response,msg_size);// send message to the client
  if (i == -1){ // check if data was successfully sent out
    err(1,"write() failed.");
  }
  else if (i != msg_size){
    err(1,"write(): buffer written partially");
  }
}
sendResponse(newsock,reinterpret_cast<char*>(searchResDone.data()), searchResDone.size());
呼叫:

vector<char> searchResDone = {0x30, 0x0c, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0a, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
void sendResponse(int newsock, char response[], int msg_size){
  int i = write(newsock,response,msg_size);// send message to the client
  if (i == -1){ // check if data was successfully sent out
    err(1,"write() failed.");
  }
  else if (i != msg_size){
    err(1,"write(): buffer written partially");
  }
}
sendResponse(newsock,reinterpret_cast<char*>(searchResDone.data()), searchResDone.size());
sendResponse(newsock,reinterpret_cast(searchResDone.data()),searchResDone.size());

问题:

vector<char> searchResDone = {0x30, 0x0c, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0a, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
void sendResponse(int newsock, char response[], int msg_size){
  int i = write(newsock,response,msg_size);// send message to the client
  if (i == -1){ // check if data was successfully sent out
    err(1,"write() failed.");
  }
  else if (i != msg_size){
    err(1,"write(): buffer written partially");
  }
}
sendResponse(newsock,reinterpret_cast<char*>(searchResDone.data()), searchResDone.size());
我正在分解来自客户端的searchRequest,然后将其作为

vector<string> response;
向量响应;
我不知道的是将响应作为
vector
vector vcStr;vcStr[0]例如是0x30
)发送,但我无法将其转换为
vector
。我只将一个字符串从vector转换为char数组作为{0,x,3,0,…},但我需要一个十六进制数作为一个字符,正如您可以看到的更高的那样

我试图自己解决这个问题,但我没有主意

更新: 客户机正在使用mail
mail=my询问用户的姓名。mail@mail.com
我已将姓名、登录名、邮件按相同顺序(
name[1]、登录名[1]、邮件[1]
)解析为
vector
,因此如果我将收到
mail=my。mail@mail.com


当我在
矢量邮件中循环时使用regex,这样我就知道
邮件[1]
是否匹配,我可以从
名称[1]
中取名字。。然后我将把这个
名称[1]
转换成十六进制数,我需要将它存储在某个数组
{0x30,0x0c,…}
,将相同类型的数组组合在一起,并将其作为一个大数组
{0x30,0x0c,…}
到目前为止,最简单的解决方案是反复调用
sendResponse
,在
向量中的每个
字符串上
。目的地是一个套接字,几乎可以肯定的是一个流(不是消息)套接字。流套接字的另一端看不到您调用
sendResponse
的频率;他们只看到一个字节流

你能以类似代码的形式发布一个不起作用的代码示例或你正在尝试做的事情吗?你的意思是
vcStr.c_str()
vcStr[0].c_str()
?我们当然可以从
std::vector
为你编写一个
std::vector
,但这听起来像是一个设计缺陷,而且你的帖子中没有足够的上下文来说明其他情况。告诉我们更多关于
searchRequest
;它是如何创建的,以及您使用它做什么的。@斯塔克:这(第一个)将给出一个c样式的数组,它是
std::string
,而不是
char
。从一个向量到另一个向量没有“简单”的方法,因为所有的字符串都在堆上的某个地方,而不是以连续的方式。searchRequest没有那么重要,但是它从客户端发送的消息是十六进制数。我解码它,以了解我必须搜索和发送回客户端。例如,客户机正在询问具有
'(mail=my)的用户的姓名。mail@mail.com)“
然后我正在解析csv utf-8文件,它看起来像:
Firstname Lastname;登录;我的。mail@mail.com
我必须从头到脚构建十六进制消息,因为我必须检查几乎每个元素之后的长度。它看起来是这样的:
0x04,
然后我需要以{0x30,0x0c,…}的形式向客户端发送消息,谢谢!老实说,我不知道我只能作为一个数组发送ldap消息,但也可以在循环中发送。在我问题的末尾添加解决方案。再次感谢@MrVopi:不仅仅是LDAP。在流协议之上发送消息的任何协议都必须插入自己的消息分隔符。无论是JSON的
{}
还是XML的
,另一端都无法知道您是否以相同的
write()
发送了开始和结束。