Я просмотрел эти строки кода, которые использовались для преобразования строки в двоичный файл, но я не могу понять, что делает эта строка кода (hexchar_to_int (str [i]) << 4) | hexchar_to_int (str [i + 1]), я разочарован этой битовой манипуляцией здесь, используется 8 битов unsigned int, и мы сдвинулись влево, чтобы получить как минимум 4 значащих бита. Но я не знаю, как это сделать. </p>
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;
}