Question

Je dois traiter les octets [] lorsque je viens d'une application externe. L'application externe est également réalisée en C # et ils envoient les octets via UDP. Ils envoient les octets convertis à partir de la structure, comme indiqué ci-dessous:

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

Ainsi, lorsque je reçois les octets, je dois retirer le caractère [] à l'intérieur de celui-ci et obtenez la chaîne de ce caractère [].

Je suis nouveau dans ce type de codage non géré.

Était-ce utile?

La solution

Vous devriez probablement le déclarer comme ByValTStr (selon la nature de la chaîne, celle-ci pourrait être différente):

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

UPDATE: si un code char [] est déjà généré, il effectue probablement la conversion nécessaire (y compris le traitement de l'encodage), alors je pense que vous aurez simplement besoin :

string str = new string(instance.federation_name);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top