Недавно я оказался в следующей ситуации. Мне поручено написать 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);
но ведь в некоторых кодировках могут содержаться нулевые байты, а значит подсчет байт до первого нулевого не подходит.

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