You can get a std::wstring (using wide characters) out of a System.String pretty easily. You need to get the characters, pin them down, then construct a wstring from them.
Getting a std::string is trickier, because you also need to convert the unicode characters to a mbcs representation. You have two options.
System::String *netstr; // Fill with data.
wchar_t characters __gc = netstr->ToCharArray();
wchar_t __pin *pinner = &characters;
std::wstring wstr(pinner, netstr->get_Length());
1) You can use the code above and then convert the characters in native code.
2) You can convert the characters in managed code resulting in a byte array, and then use the technique above to get a char __pin* from the byte array and create a std::string from that. In that case, make sure you pass the length of the array as the length, not that of the string, as the string counts UTF-16 characters, which may differ from the number of bytes in whatever your local code page is. (Probably ISO-8859-1.)