字节串到字节数组c++
String of Bytes to Byte array c++
我正在尝试制作采用此模式字符串的函数:
"07 C5 8F E1 FD CA 8C E2 D4 FD BC E5 03 C6 8F E2"
到return这个BYTE数组
BYTE pattern[] = { 0x07, 0xC5, 0x8F, 0xE1, 0xFD, 0xCA, 0x8C, 0xE2, 0xD4, 0xFD, 0xBC, 0xE5, 0x03, 0xC6, 0x8F, 0xE2};
我尝试了什么:
BYTE strPatternToByte(std::string pattern, int len)
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(pattern);
while(std::getline(tokenStream, token, ' '))
{
tokens.push_back(token);
}
BYTE somePtr[len];
for ( int i=0 ; i < len ; i++)
{
somePtr[i] = '0x' + tokens[i];
}
return somePtr;
}
但是转换为字节模式的行对我不起作用,
somePtr[i] = (byte) tokens[i];
在 C++ 中有没有一种方法可以自动将它们解析为字节或类似 java 的东西?
问题是 (byte) tokens[i]
不会将字符串转换为另一种类型,而是要求编译器将 tokens[i]
中的 std::string
对象视为 byte
,它不是也不能转换成。这基本上是你在向编译器撒谎。事实上,基本上所有 C-type 投射都应该是一个红旗,表明你做错了什么。
一个解决方案是使用普通的流提取运算符 >>
将每个 space-delimited 十六进制序列解析为无符号整数:
std::vector<unsigned> values;
std::istringstream stream(pattern);
unsigned value;
while (stream >> std::hex >> value)
{
values.push_back(value);
}
我正在尝试制作采用此模式字符串的函数:
"07 C5 8F E1 FD CA 8C E2 D4 FD BC E5 03 C6 8F E2"
到return这个BYTE数组
BYTE pattern[] = { 0x07, 0xC5, 0x8F, 0xE1, 0xFD, 0xCA, 0x8C, 0xE2, 0xD4, 0xFD, 0xBC, 0xE5, 0x03, 0xC6, 0x8F, 0xE2};
我尝试了什么:
BYTE strPatternToByte(std::string pattern, int len)
{
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(pattern);
while(std::getline(tokenStream, token, ' '))
{
tokens.push_back(token);
}
BYTE somePtr[len];
for ( int i=0 ; i < len ; i++)
{
somePtr[i] = '0x' + tokens[i];
}
return somePtr;
}
但是转换为字节模式的行对我不起作用,
somePtr[i] = (byte) tokens[i];
在 C++ 中有没有一种方法可以自动将它们解析为字节或类似 java 的东西?
问题是 (byte) tokens[i]
不会将字符串转换为另一种类型,而是要求编译器将 tokens[i]
中的 std::string
对象视为 byte
,它不是也不能转换成。这基本上是你在向编译器撒谎。事实上,基本上所有 C-type 投射都应该是一个红旗,表明你做错了什么。
一个解决方案是使用普通的流提取运算符 >>
将每个 space-delimited 十六进制序列解析为无符号整数:
std::vector<unsigned> values;
std::istringstream stream(pattern);
unsigned value;
while (stream >> std::hex >> value)
{
values.push_back(value);
}