Как преобразовать C-строку в System.String?
От: a.v.murashov  
Дата: 01.07.05 10:36
Оценка:
Недавно я оказался в следующей ситуации. Мне поручено написать dotNet-оболочку над native-библиотекой, некоторые (очень важные)функции которой имеют заголовок вида:

const char* XXX_get_error_message (XXX_connection connection);


При этом функции могут возвращать C-строки в разных кодировках, в том числе и в Юникоде. Кодировка в любой момент времени мне известна (доступен объект
System.Text.Encoding
), я даже сначала написал:

// MC++

const char* ptr = XXX_get_error_message (myConnection);

// Подсчет количества байт в строке.
int length = 0;
while (ptr[length]) length++;

unsigned char bytes __gc[] = new unsigned char __gc [length];
Marshal::Copy (const_cast<char*>(ptr), bytes, 0, length);

String* msg = myEncoding->GetString (bytes);


но ведь в некоторых кодировках могут содержаться нулевые байты, а значит подсчет байт до первого нулевого не подходит. Подскажите, пожалуйста, как мне выкрутиться из этой ситуации? Может быть есть другой способ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.