Как преобразовать 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