Domanda

Devo elaborare i byte [] quando ottengo da un'applicazione esterna. L'applicazione esterna viene eseguita anche in C # e inviano i byte tramite UDP. Stanno inviando i byte convertiti da struct che è indicato di seguito:

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

Quindi, quando ottengo i byte, devo eliminare il carattere [] al suo interno, e togli la stringa da quel carattere [].

Sono nuovo di questo tipo di codifica non gestita.

È stato utile?

Soluzione

Probabilmente dovresti dichiararlo come ByValTStr (a seconda della natura della stringa, potrebbe essere diverso):

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

AGGIORNAMENTO: Se sta già distribuendo un char [] , probabilmente sta eseguendo correttamente la conversione necessaria (inclusa la gestione della codifica), quindi penso che avresti solo bisogno :

string str = new string(instance.federation_name);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top