Accueil > Forum > > > > Serialisation binaire dans un flux mémoire
Serialisation binaire dans un flux mémoire
vendredi 4 juillet 2008 à 11:45:19 |
Serialisation binaire dans un flux mémoire

renyone
|
Salut, j'ai l'impression que quelquechose m'échappe et je sollicite donc votre aide. J'ai une méthode de sérialisation binaire dans un flux mémoire de la forme: public unsafestaticstring FormatTypes<T>(T myObject){ BinaryFormatter bf = newBinaryFormatter();MemoryStream ms = newMemoryStream();bf.Serialize(ms, myObject); ms.Close(); byte[] buffer = ms.ToArray();
...
}
Quand j'essaye tout bêtement de sérialiser un sbyte, la tailler de buffer est de 51 alors que je m'attendais à avoir plutot 1 vu que les sbytes sont stockés sur 1 octet.
Quelqu'un aurait-il une idée la dessus?
Merci d'avance.
|
|
vendredi 4 juillet 2008 à 12:30:30 |
Re : Serialisation binaire dans un flux mémoire

SharpMao
|
Hello,
C'est parce que la sérialisation binaire garde certaines informations en plus, comme le type de l'objet sérialisé.
Si tu enregistre le contenu de ton buffer dans un fichier et que tu l'ouvres avec un notepad, tu verras, en plus de certains caractères de contrôles : "System.SByte" et "m_value" écris en toutes lettres.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!" (Coluche / 1944-1986 / Pensées et anecdotes)
|
|
vendredi 4 juillet 2008 à 12:31:12 |
Re : Serialisation binaire dans un flux mémoire

niky
|
Salut,
C'est parfaitement normal. La sérialisation ne consiste pas seulement à stocker les types simples (int, string, byte, bool, etc). Si tu sérialises des classes, le framework doit stocker le nom de la classe. Si plus est les classes que tu sérialises ont des liens entre elles, ces références doivent être enregistrés aussi.
|
|
vendredi 4 juillet 2008 à 13:07:22 |
Re : Serialisation binaire dans un flux mémoire

renyone
|
Merci de vos réponses.
Mais dans ce cas, comment recupérer (désérialiser) les données "essentielles" comme la valeur du sbyte placé en paramètre? Parce que je dois récupérer ce tableau de bytes (buffer dans le code ci-dessus) et l'utiliser dans une fonction C++ qui aura pour but de le décoder.
Pour résumer:
fonction c# qui sérialise mes données dans un flux mémoire ==> tableau de bytes [] ==> fonction c++ qui décode (désérialise) le tableau de sbyte (char*).
Merci !
A+
|
|
vendredi 4 juillet 2008 à 14:54:12 |
Re : Serialisation binaire dans un flux mémoire

niky
|
Typiquement, la sérialisation bnaire est spécifique à chaque environnement : Java sérialise d'une certaine manière, .Net de sa manière, etc. La bibliothèque standard de C++ ne possède pas de moteur de sérialisation.
Pour échanger un tableau de entre .Net et C++ (je ne parle pas de C++ .Net), tu as la possibilité - de passer un pointeur sur ton tableau (c'est ce qui est fait quand on appel une API Windows en .Net) - d'écrire dans un fichier (assez moyen comme technique) - de passer par un méthode standardisé d'échange de données (c'est typiquement le cas de SOAP/CORBA, RPC)
|
|
vendredi 4 juillet 2008 à 15:00:25 |
Re : Serialisation binaire dans un flux mémoire

renyone
|
Merci Nicky.
Je pensais effectivement passer un pointeur sur le tableau. La méthode c# doit obligatoirement renvoyer un tableau de bytes (ce n'est pas moi qui décide...) que je dois passer sous forme de pointeurs de caractères (char*) à ma méthode c++.
A ce niveau j'ai un problème: comment convertir ce bytes[] en char* ?
|
|
vendredi 4 juillet 2008 à 19:29:58 |
Re : Serialisation binaire dans un flux mémoire

niky
|
Réponse acceptée !
Un byte[] .Net est l'équivalent de char* en C. Tout comme char[] et Int16[] sont l'équivalent de short* (car les char .Net sont stocké sur 2 octets).
Je présume que tu dois posséder une DLL et que tu souhaites appeler une fonction de cette DLL. Par exemple, pour appeler une fonction C qui a le prototype suivant et qui est exposé dans la DLL nommée "mylib.dll" : int myfunction(char *input)
C'est une fois en C# où tu peux commencer à faire un peu n'importe quoi. En fait, pour représenter un pointeur, tu peux avoir plusieurs notations qui sont équivalentes [DllImport("mylib.dll")] static extern int myfunction(byte[] input); ou [DllImport("mylib.dll")] static extern int myfunction(ref byte input); ou [DllImport("mylib.dll")] static extern int myfunction(IntPtr input); et même, car un pointeur n'est rien d'auteur qu'un entier : [DllImport("mylib.dll")] static extern int myfunction(int input);
Après, le compilateur .Net ne te permettra pas d'appeler ces 3 écritures avec un byte[] en premier argument (seule la première sera acceptée par le compilo). Toutefois, toutes ces écritures reviennent à passer un char*. Tu trouveras de la litterature là dessous en recherchant autour des termes Interop et Marshal.
|
|
jeudi 10 juillet 2008 à 17:08:35 |
Re : Serialisation binaire dans un flux mémoire

renyone
|
Effectivement, tout ceci peut se trouver dans la litterature, en tappant interoperabilité c# c++ par exemple. Il est res facile d'utiliser la classe Marshall ensuite. Merci bien!
|
|
Cette discussion est classée dans : ms, binaire, flux, mémoire, serialisation
Répondre à ce message
Sujets en rapport avec ce message
Récupérer un flux audio [ par 24buzz ]
Salut, Je voudrais récupérer un flux audio d'un SecondaryBuffer. Je m'explique, je voudrais récupérer les bits d'un fichier audio en cours de lecture
Serialisation avec binaryFormatter [ par ducker88 ]
Bonjour à tous.Je suis en train d'essayer de serialiser un string en binaire par l'intermediaire d'un memorystream. Et ensuite de le recuperer.Voici m
Image, flux binaire , redimensionnement [ par Diamondduff ]
Je suis un peu perplexe, comment cela fonctionne t-il? quel type de composant il faut pour faire ca?L'image est affichée apparemment par flux, la tail
Serialisation [ par RM50Man ]
Quand doit on utiliser la serialisation?RM50man
Flux des fichiers images [ par billou_13 ]
Alors, voila mon titre est pas trop explicite mais par ce message, je vais essayer de l'être. J'ai un code qui réceptionne une image par une connexio
HELP!!! Comment installer/désinstaller en c#?? [ par Bidibule ]
Salut tout le monde!!j'ai une petite question pr vous car je me demande comment créer un exécutable de mon projet que je pourrais installer/désinstall
Les tableaux [ par DrChal ]
DrChalSalut,Mes Meilleurs Voeux à tous.J'ai une petite question de débutant.Peut on faire des tableaux d'enregistrement comme dans VB.?Ex en VB :Priva
pb de réalisation [ par mynus ]
[MynusHello, j'ai programmé une petite application pour ma fille : en déplaçant le curseur de la souris elle fait apparaitre une image , banal quoi ,
detection d image [ par pogo ]
bonjour za tous,je cherche un moyen (simple...) de detecter une image dans un flux. je m'explique : il faut que sur une fourchette courte (10 min de v
contacts d'outlook [ par Jula ]
salut à tous!je dois créer une application intranet sur un réseau avec un serveur de messagerie sous exchange 2000 server avec des clients Outlook qui
Livres en rapport
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|