2012-04-20 1 views
0

У меня есть объект CString ул = «5043», теперь я хочу, чтобы преобразовать в Hex и поместить его в Uchar массив какКак преобразовать CString в массив UCHAR?

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

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

+0

Это, возможно, уже был дан ответ в этой теме: http://stackoverflow.com/questions/3381614/c-convert-string-to-hexadecimal-and-vice-versa –

+0

как возможность для расширения область действия этого вопроса, "cstring object str" -> "string". «UCHAR» -> «unsigned char», то просто оставьте это как вопрос на C++. –

ответ

1

Вы можете сканировать шестнадцатеричные значения непосредственно из строки, используя 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.

+0

Спасибо, он работает очень хорошо :) – Naruto

+0

Добро пожаловать! – vvnraman

1

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

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

Надеется, что это помогает,

+0

На самом деле, я уже получил преобразованное значение, но мне просто нужно обновить переменную UCHAR – Naruto

+0

Хм, в этом случае, я думаю, вам нужен другой вопрос! Например, как разделить целое число на два байта? (Для шестнадцатибитного значения) Вероятно, вам нужно сдвинуть 8 бит для старшего байта и побитового и (&) с 255 для младшего байта. –

0

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

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

    CString str = "5043"; 
    long_val = strtol(str.GetString(), nullptr, 16); 
    // use char_val here