我听不懂这行代码(hexchar_to_int(str [i])<< 4)| hexchar_to_int(str [i + 1]))。有人可以解释我吗

问题描述 投票:0回答:1

我查看了这些用于将字符串转换为二进制的代码行,但是我不明白这是什么代码行正在执行(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;

 }
c++17
1个回答
0
投票

<<4*2^4*16,向右移动[[left,而不向右移动。|是两个2个十六进制字符在其正确位置的简单加法。参见0xab = 10 * 16 + 11 = 171

© www.soinside.com 2019 - 2024. All rights reserved.