Как преобразовать CString в массив UCHAR?

У меня есть объект cstring str = "5043", теперь я хочу преобразовать в Hex и поместить его в массив UCHAR, как

UCHAR sample[2];
Sample[0] = 0X50 
Sample[1] = 0X43

Как я могу это сделать? пожалуйста посоветуйте мне

3 ответа

Решение

Вы можете сканировать шестнадцатеричные значения непосредственно из строки, используя sscanf()что-то вроде ниже:

UCHAR sample[2];
for ( int i = 0; i < str.length() / 2 ; i++) {
    sscanf( (str.substr(i*2,2)).c_str(), "%hx", &sample[i]);
}

h для краткости и x для шестнадцатеричного очевидно.

Кроме того, это предполагает, что UCHAR массив объявлен в два раза меньше, чем string размер.

Вы пробовали прогуляться? Кажется, это немного низкотехнологично, но должно сработать. Не забудьте передать 16 в качестве базы...

Вам нужно будет скомбинировать его с небольшим сдвигом и побитовым разбиением, чтобы разделить результат на то, что вам нужно, но это должно быть просто.

Надеюсь это поможет,

Чтобы сделать ваш код проще, вы можете использовать объединение, например

    union
    {
    UCHAR char_val[2];
    long long_val;
    };

    CString str = "5043";
    long_val = strtol(str.GetString(), nullptr, 16);
    // use char_val here
Другие вопросы по тегам