Предполагая, что все символы в System::String
находятся в диапазоне ASCII, самая базовая реализация будет выглядеть примерно так:
void ConvertAndCopy(System::String^ ms, char* us)
{
for (int i(0); i < ms->Length; ++i)
us[i] = static_cast<char>(ms[i]);
us[ms->Length] = '\0';
}
// usage example:
System::String^ ms = "Hello world";
char us[12] = "";
ConvertAndCopy(ms, us);
Обратите внимание, что при этом не выполняется проверка границ массива назначения и не выполняется преобразование набора символов.
Работает ли это лучше, чем StringToHGlobalAnsi
или стоит ли какой-либо прирост производительности значительного увеличения сложности (а именно, управления собственной памятью и обработки преобразований наборов символов), я не знаю.