Как преобразовать UCHAR в двоичный

Я хочу знать, как преобразовать массив UCHAR в двоичную строку в C++/MFC.

Я попробовал некоторые возможности Cstring, но они не сработали. Пожалуйста, дайте мне знать, почему.

Вот код, который я пробовал:

UCHAR ucdata[256];
ucdata[0] = 40;
char data[100];
StrCpy(data,(char *)ucData);
CString dataStr(data);


// original value


// convert to int
int nValue = atoi( dataStr );

        // convert to binary
        CString strBinary;
        itoa( nValue, strBinary.GetBuffer( 50 ), 2 );
        strBinary.ReleaseBuffer();

person Naruto    schedule 23.06.2011    source источник
comment
Почему бы вам не показать более подробно, что вы пытаетесь сделать (почему), а также показать, что вы пробовали?   -  person crashmstr    schedule 23.06.2011
comment
Покажите нам свой код и расскажите о своих ожиданиях.   -  person Kerrek SB    schedule 23.06.2011
comment
Это вполне может быть дубликатом: /708114/   -  person FrankH.    schedule 23.06.2011
comment
Привет, я обновил квест своим кодом, пожалуйста, помогите   -  person Naruto    schedule 23.06.2011
comment
Вам нужна текстовая двоичная распечатка вашего массива UCHAR? В таком случае можно ли убедить вас принять шестнадцатеричную распечатку? Это будет только 25% размера.   -  person Kerrek SB    schedule 23.06.2011
comment
Да, именно.. мне нужен текстовый вывод двоичного кода.. что не так с моим кодом   -  person Naruto    schedule 23.06.2011


Ответы (2)


C++... MFC CString наверняка не так...

В стандартном С++ вы можете сделать:

UCHAR ucdata[256];
ostringstream oss(ostringstream::out);
ostream_iterator<UCHAR> out(oss);

oss << setbase(2) << setw(8) << setfill('0');
copy(ucdata, ucdata + sizeof(ucdata), out);

cout << oss.str() << endl;

Я не уверен, как преобразовать это в MFC, хотя, если существуют конвертеры между классами std::string и MFC CString, вы можете попробовать их использовать?

person FrankH.    schedule 23.06.2011

Вы можете попробовать что-то вроде этого (но обратите внимание, что itoa не является строго переносимым):

UCHAR ucdata[256]; // filled somehow

CString result;    // starts out empty
char buf[9];       // for each number

for (size_t i = 0; i < 256; ++i)
  result += itoa(ucdata[i], buf, 2);

Я не знаю CString, но если это похоже на std::string, то вы можете добавлять C-строки с завершающим нулем просто с помощью оператора +.

person Kerrek SB    schedule 23.06.2011