【发布时间】:2021-07-01 14:36:58
【问题描述】:
我正在尝试将 char 缓冲区转换为多个 int 变量。这是我经过一天的尝试后得到的结果。
ZeroMemory(buf, 4096);
int bytesReceived = recv(sock, buf, 4096, 0);
if (bytesReceived > 0)
{
/*for (int i = 0; i < bytesReceived; i++)
{
cout << hex << (int)buf[i];
}*/
std::stringstream ss;
std::stringstream aa;
for (int i = 0; i < 2; i++)
ss << std::hex << (int)buf[i];
unsigned result;
ss >> result;
int Number1 = result;
cout << Number1 << "\n";
for (int j = 2; j < 4; j++)
aa << std::hex << (int)buf[j];
unsigned result2;
aa >> result2;
int Number2 = result2;
cout << Number2 << "\n";
}
这在控制台中为我提供了所需的数字 20000 和 10000。现在我如何做到这一点,而无需每次我想这样做,整个部分:
for (int j = 2; j < 4; j++)
aa << std::hex << (int)buf[j];
unsigned result2;
aa >> result2;
int Number2 = result2;
cout << Number2 << "\n";
从零知识到现在,我的大脑被炸了。如果有人可以帮助我,将不胜感激。
【问题讨论】:
-
如果代码正常工作,而您现在只是在尝试优化它,那么您应该改为在CodeReview 上提问。
-
@RemyLebeau 谢谢,我会在那里问。我刚刚让它像这样工作已经写了一个小时的问题,在这之间我得到了我尝试过的想法,这就是为什么现在它正在工作。我最初的问题是如何将 char 缓冲区转换为整数,因为我做不到。
-
您的
buf中有什么内容?代表十六进制值的字符,0..F?您是否一次将它们转换为整数两个字符?你怎么得到超过 255 的东西? -
我建议在互联网上搜索“C++ 序列化库”。
-
@VladFeinstein 在 buf 中我从 tcp 流字节中获取,但出于某种原因,我使用 winsock 的方式我只在 4e20(十六进制)的 buf 中获取字符,我得到 N(4e)和一个空格(20) 对于 buf 的前两个字节
标签: c++ string integer hex buffer