Structures C en C#

Loran83 Messages postés 3 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 4 avril 2008 - 3 avril 2008 à 15:33
Loran83 Messages postés 3 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 4 avril 2008 - 4 avril 2008 à 09:19
Tout nouveau en C#. J'ai un truc tout bête en C ou C++ que je n'arrive pas à faire en C# :
struct xyz
{
    int x;

    char y[128];
    struct* xyz z;
} myStruct;
byte *xyz2Byte = new byte[sizeof(xyz)];
xyz2Byte = (xyz*) &myStruct;
En gros convertir le contenu d'une structure en tableau d'octets. J'ai cherché un peu partout sans rien trouver.
Si qq peut aider...

   

3 réponses

Loran83 Messages postés 3 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 4 avril 2008
3 avril 2008 à 17:05
P'tite erreur dans le code C++, c'est encore + simple, j'ai tapé rapidos à l'arrache...
struct xyz
{
    int x;
    char y[128];
    xyz* z;
} xyzStruct;
byte* xyz2Byte;
xyz2Byte = (byte*) &xyzStruct;
Y'a pas aussi simple en C# ?
Merci...
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
4 avril 2008 à 01:03
Salut, si tout aussi simple.. mais ce genre de code est à utiliser si tu fais de l'interop avec du code C/C++ sinon faut penser différemment en C#, et ne plus utiliser le pointeurs, du moins pas pour ce genre de chose.

[ StructLayout( LayoutKind.Sequential ) ]
public unsafe struct XYZ
{
    public int x;
    public fixed byte y[ 128 ]; //  char = 2 octets en C#.
    public XYZ* z;
}

public unsafe void DoSomething( )
{
    XYZ xyz; // non initialisé.
    byte* p = ( byte* )&xyz;
}
0
Loran83 Messages postés 3 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 4 avril 2008
4 avril 2008 à 09:19
Merci de ta réponse.
J'avais déjà essayé avec 'unsafe', mais comme tu le dis, j'essaie effectivement de penser différemment en C#.
D'où ma recherche d'un équivalent VRAIMENT C#.
La raison en est simple, je dois stocker une stucture dans un champ blob d'une table SQLite. Il me faut donc bien la transformer en bytes.
Mon code actuel est le suivant :
[Serializable]
public struct image
{
    public String imageName;
    public Rectangle imageRect;
}
image uneImage;
using (MemoryStream ms = new MemoryStream())
{
    BinaryFormatter bf = new BinaryFormatter();
    br.Serialize(ms, uneImage);
    byte[] flatData = ms.ToArray();
    ms.Close();
    .../...
}
Mais ça marche pas terrible. Donc si qq à une idée...
Merci
0