Pregunta

Necesito procesar los bytes [] cuando obtengo una aplicación externa. La aplicación externa también se realiza en C # y envían los bytes a través de UDP. Están enviando los bytes convertidos de la estructura que se indica a continuación:

public struct DISPATCH_MESSAGE
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
    public char[] federation_name; // Units: nil     Range: nil
}

Entonces, cuando obtengo los bytes, necesito sacar el char [] dentro de eso, y sacar la cadena de ese char [].

Soy nuevo en este tipo de codificación no administrada.

¿Fue útil?

Solución

Probablemente debería declararlo como ByValTStr (dependiendo de la naturaleza de la cadena, puede ser diferente):

 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
 public struct DISPATCH_MESSAGE{ 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]   
    public string federation_name; 
 }

ACTUALIZACIÓN: si ya está dando un char [] , probablemente esté haciendo la conversión necesaria (incluye el manejo de la codificación) correctamente, así que creo que solo necesitaría :

string str = new string(instance.federation_name);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top