Как преобразовать 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);


но ведь в некоторых кодировках могут содержаться нулевые байты, а значит подсчет байт до первого нулевого не подходит. Подскажите, пожалуйста, как мне выкрутиться из этой ситуации? Может быть есть другой способ?
Как преобразовать C-строку в System.String?
От: Аноним  
Дата: 01.07.05 10:56
Оценка:
вообще-то есть стандартный конструктор
unsafe public String(
char* value
);
чем он вас не устраивает?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Как преобразовать C-строку в System.String?
От: a.v.murashov  
Дата: 04.07.05 06:13
Оценка:
Здравствуйте, NETiZen, Вы писали:

NET>вообще-то есть стандартный конструктор

NET>unsafe public String(
NET> char* value
NET>);
NET>чем он вас не устраивает?

Дело в том, что он принимает только Unicode
Re: Как преобразовать C-строку в System.String?
От: Аноним  
Дата: 04.07.05 06:43
Оценка:
а этот?
public: String(char*, int, int, Encoding*);



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Как преобразовать C-строку в System.String?
От: a.v.murashov  
Дата: 04.07.05 07:55
Оценка:
Здравствуйте, NETiZen, Вы писали:

NET>а этот?

NET>public: String(char*, int, int, Encoding*);


он, конечно, хорош. Но опять же требует количество байт в строке!
Re[3]: Как преобразовать C-строку в System.String?
От: johny5 Новая Зеландия
Дата: 17.08.05 09:55
Оценка:
Здравствуйте, a.v.murashov, Вы писали:

AVM>Здравствуйте, NETiZen, Вы писали:


NET>>а этот?

NET>>public: String(char*, int, int, Encoding*);


AVM>он, конечно, хорош. Но опять же требует количество байт в строке!


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