2013-12-03 2 views
1

У меня проблемы с преобразованием unsigned char в CString и наоборот, преобразование результата преобразованной CString в unsigend char.Как правильно преобразовать unsigned char в CString и еще раз, обратное преобразование в результат CString для unsigend char?

Во-первых, я пытаюсь использовать CString.append() ;.

///////////////////////////

CString result2; 
CString result3; 
unsigend char unchar_result[9]; 
unchar_result = {143, 116, 106, 224, 101, 104, 57, 157}; 
unchar_result[8] = NULL; 

for(int i=0; i<8; i++){ 
    result2=(char)temp[i]; 
    result3.append(result2); 
} 

//////////// //////////////

В результате я думаю, что результат3 был правильно заменен.

если я увидел 'unchar_result' кодом ASCII, то unchar_result = "? Tj? Eh9?" и result3 был «? tj? eh9?» слишком.

но, я хочу обратный преобразовать (CString) result3 в unsigned char matrix.

unsigned char a; 
unsigned char testdecode[8]; 
for(int i=0; i<8 ; i++){ 
    a=result3.GetAt(i); 
    testdecode[i]=a 

} 

После преобразования результат был «? Tj? Eh9?» но значение было {63, 116, 106, 63, 101, 104, 57, 63} ... Я ожидаю, что результат был {143, 116, 106, 224, 101, 104, 57, 157}.

следующий, я попробую снова использовать CStringA.

CStringA result6; 
result6(unchar_result); 

и я вижу значение через локальное переменное окно отладочного инструмента. то результат6 был «뢶 j? h9 앀 儆?» Кроме того, int len ​​= result6.GetLength() = 13.

это делает меня сумасшедшим ... как правильно преобразовать unsigned char в CString и сделать инверсный?

+0

Я знаю, что это не ответ на ваш вопрос, но есть ли у вас какая-либо особая причина использовать CString и char *? Если вы можете использовать std :: string, было бы намного проще. – Dino

+0

Я использую 'MFC'. и CString была переменной-членом Edit Control. поэтому я должен использовать CString. и теперь, я делаю DES алгоритм. Поэтому для шифрования мне нужен неподписанный символ. – Jun88

ответ

2

Преобразование в CString довольно просто, просто передайте unsigned char* на c'tor. Преобразование от CString до unsigned char* - это немного больше работы, см. Ниже.

unsigned char orig[] = "hello world"; 
std::cout << orig << " (unsigned char *)" << std::endl; 

// Convert to a CString 
CString cstring(orig); 
std::cout << cstring << " (CString)" << std::endl; 

// Convert to a unsigned char* 
const size_t newsize = (cstring.GetLength() + 1); 
unsigned char* nstring = new unsigned char[newsize]; 
strcpy_s((char*)nstring, newsize, cstring); 
std::cout << nstring << " (unsigned char*)" << std::endl; 
+0

не компилируется ... strcpy_s ((char *) nstring, newsize, cstring) метод делает ошибку. Он не может преобразовать 'CString' в 'const char *' Мне очень жаль truble – Jun88

+0

, и когда я конвертирую в CString, не поддерживающий CString cstring (orig), он работает неправильно. если unsigned char превысил значение 127 (расширенный ASCII), cstring (orig) не работал ... Я преобразовал unsigned char temp [9] = {143, 116, 106, 224, 101, 104, 57, 157 , NULL} в CString. Использование результата CString (temp). но result.GetLenght() = 6 ... – Jun88

+0

Ошибка компиляции, вероятно, из-за того, что включена поддержка Unicode. Я создал свой проект с поддержкой нескольких байтов, который компилируется и выполняется просто отлично. Вам действительно нужно использовать 'unsigned char *' или вы также можете использовать 'std :: wstring'? –

1

Взгляните на документацию, вы можете построить CString из указателя на буфер char MSDN. All supported operations for CString class, вы можете использовать функцию GetBuffer, чтобы получить указатель на внутренний буфер CString, вызвать ReleaseBuffer, чтобы получить право владения этим буфером.

 Смежные вопросы

  • Нет связанных вопросов^_^