C++ 十六进制到十六进制字节的字符串
我的意见是C++ 十六进制到十六进制字节的字符串,c++,C++,我的意见是 char *str = "/send 13 01 09 00"; 我需要的输出只是 BYTE* result = { 0x13, 0x09, 0x00 }; (因此跳过/send) 有人能给我一个从十六进制字节串中获取字节的解决方案吗 这就是我尝试过的: #include "stdafx.h" #include <iostream> #include <windows.h> #include <conio.h> #include <str
char *str = "/send 13 01 09 00";
我需要的输出只是
BYTE* result = { 0x13, 0x09, 0x00 };
(因此跳过/send)
有人能给我一个从十六进制字节串中获取字节的解决方案吗
这就是我尝试过的:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
byte *ToPacket(const char* str)
{
const char *pos = str;
unsigned char val[sizeof(str)/sizeof(str[0])];
size_t count = 0;
for(count = 0; count < sizeof(val)/sizeof(val[0]); count++)
{
sscanf_s(pos, "%2hhx", &val[count]);
pos += 2 * sizeof(char);
}
return val;
}
int _tmain(int argc, _TCHAR* argv[])
{
redo:
while (true)
{
std::string key;
std::getline(std::cin, key);
if (key != "")
{
if (key == "/hit")
{
BYTE packet[] = { 0x13, 0x01, 0x00 };
int size = sizeof(packet) / sizeof(packet[0]);
std::cout << "[FatBoy][" << key << "]: Hit\n";
}
else if (strstr(key.c_str(), "/send"))
{
BYTE * packet = ToPacket(key.c_str());
int size = sizeof(packet) / sizeof(packet[0]);
}
key = "";
break;
}
Sleep(100);
}
goto redo;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
字节*ToPacket(常量字符*str)
{
const char*pos=str;
无符号字符val[sizeof(str)/sizeof(str[0]);
大小\u t计数=0;
对于(count=0;count#包括
#包括
#包括
#包括
std::字符串s(“/send 13 01 09 00”);
int v1、v2、v3、v4;
std::string cmd;
std::istringstream inp_流;
inp\u流>>cmd>>std::setbase(16)>>v1>>v2>>v3>>v4;
#包括
#包括
#包括
#包括
std::字符串s(“/send 13 01 09 00”);
int v1、v2、v3、v4;
std::string cmd;
std::istringstream inp_流;
inp\u流>>cmd>>std::setbase(16)>>v1>>v2>>v3>>v4;
使用带有IO操纵器的std::istringstream
来填充std::vector
:
std::字符串s(“13010900”);
std::向量v;
std::istringstream(以秒为单位);
在>>标准::十六进制;
无符号短c;
当(在>>c)v.向后推(静态施法(c));
请参见演示。使用带有IO操纵器的
std::istringstream
填充std::vector
:
std::字符串s(“13010900”);
std::向量v;
std::istringstream(以秒为单位);
在>>标准::十六进制;
无符号短c;
当(在>>c)v.向后推(静态施法(c));
请参见演示。我用我尝试过的方法编辑了文章,byte*ToPacket函数提供了我想要的结果。您希望输出为byte*result={0x13,0x01 0x09,0x00};对吗?是的,我需要一个函数,它可以给我在/send XX XX XX XX XX XX XX XX XX之后键入的任何内容的字节…我用我尝试过的方法编辑了帖子,byte*ToPacket函数提供了我想要的结果。您希望输出为byte*result={0x13,0x01 0x09,0x00};对吗?是的,我需要一个函数,它可以给我在/send XX XX XX XX XX之后键入的任何内容的字节。。。
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
std::string s("/send 13 01 09 00");
int v1,v2,v3,v4;
std::string cmd;
std::istringstream inp_stream(s);
inp_stream >> cmd >> std::setbase(16) >> v1 >> v2 >> v3 >> v4;
std::string s("13 01 09 00");
std::vector<unsigned char> v;
std::istringstream in(s);
in >> std::hex;
unsigned short c;
while (in >> c) v.push_back(static_cast<unsigned char>(c));