我查看了这些用于将字符串转换为二进制的代码行,但是我不明白这是什么代码行正在执行(hexchar_to_int(str [i])<< 4)| hexchar_to_int(str [i + 1]),我很沮丧通过此处的位操作,使用了8位unsigned int,我们向左移动以获得最少的4位有效位。但是我不知道这样做的目的。
unsigned char hexchar_to_int(char const ch)
{
if (ch >= '0' && ch <= '9') return ch - '0';
if (ch >= 'A' && ch <= 'F') return ch - 'A' + 10;
if (ch >= 'a' && ch <= 'f') return ch - 'a' + 10;
throw std::invalid_argument("Invalid hexadecimal character");
}
std::vector<unsigned char> hexstr_to_bytes(std::string_view str)
{
std::vector<unsigned char> result;
for (size_t i = 0; i < str.size(); i += 2)
{
result.push_back((hexchar_to_int(str[i]) << 4) | hexchar_to_int(str[i+1]));
}
return result;
}
<<4
是*2^4
或*16
,向右移动[[left,而不向右移动。|
是两个2个十六进制字符在其正确位置的简单加法。参见0xab = 10 * 16 + 11 = 171