Thread View: be.comp.programming
5 messages
5 total messages
Started by Johan
Sun, 07 Dec 2003 22:21
struct als buffer (c#)
Author: Johan
Date: Sun, 07 Dec 2003 22:21
Date: Sun, 07 Dec 2003 22:21
15 lines
1585 bytes
1585 bytes
hey iedereen, iedereen weet (c/c++ programmeur) dat je data van een bestand rechtstreeks in een struct kan laden. dus een struct als een buffer gebruiken. weet iemand hoe ik dit kan klaarspelen in c#? ik gebruik een filestream met daarrond een binaryreader, maar de .read methode van binaryreader verwacht een byte[] buffer. casten help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan geconverteerd worden naar byte []. iemand die me kan helpen?? alvast bedankt, johan
Re: struct als buffer (c#)
Author: Pieter Philippaerts
Date: Mon, 08 Dec 2003 06:57
Date: Mon, 08 Dec 2003 06:57
23 lines
2196 bytes
2196 bytes
"Johan" <jvm.jr@pandora.be> wrote in message > iedereen weet (c/c++ programmeur) dat je data van een bestand rechtstreeks > in een struct kan laden. dus een struct als een buffer gebruiken. Je moet eerst het bestand inlezen als een byte[] array en dan kan je die byte[] omzetten naar een structure door middel van deserializatie. Je moet de BinaryFormatter klasse eens bekijken; die doet zowel serializatie als deserializatie van structs/objecten. > ik gebruik een filestream met daarrond een binaryreader, Een BinaryReader is geschikt om simpeledata structuren te serializeren/deserializeren [zoals int, uint, long, string, etc] maar het is niet geschikt om met structures te werken. > maar de .read methode van binaryreader verwacht een byte[] buffer. casten > help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan > geconverteerd worden naar byte []. C# is type-safe, dus zo'n dingen gaan niet werken. Mvg, Pieter Philippaerts
Re: struct als buffer (c#)
Author: Johan
Date: Mon, 08 Dec 2003 08:45
Date: Mon, 08 Dec 2003 08:45
37 lines
2319 bytes
2319 bytes
"Pieter Philippaerts" <Pieter@nospam.mentalis.org> schreef in bericht news:1070866663.995167@seven.kulnet.kuleuven.ac.be... > "Johan" <jvm.jr@pandora.be> wrote in message > > iedereen weet (c/c++ programmeur) dat je data van een bestand rechtstreeks > > in een struct kan laden. dus een struct als een buffer gebruiken. > > Je moet eerst het bestand inlezen als een byte[] array en dan kan je die > byte[] omzetten naar een structure door middel van deserializatie. > Je moet de BinaryFormatter klasse eens bekijken; die doet zowel serializatie > als deserializatie van structs/objecten. > > > ik gebruik een filestream met daarrond een binaryreader, > > Een BinaryReader is geschikt om simpeledata structuren te > serializeren/deserializeren [zoals int, uint, long, string, etc] maar het is > niet geschikt om met structures te werken. > > > maar de .read methode van binaryreader verwacht een byte[] buffer. casten > > help niet, dan krijg ik foutmeldingen omdat "struct test" niet kan > > geconverteerd worden naar byte []. > > C# is type-safe, dus zo'n dingen gaan niet werken. > > Mvg, > Pieter Philippaerts > > bedankt voor jouw reactie :-) nu heb ik weer stof om na te denken... groeten johan
Re: struct als buffer (c#)
Author: Luc Kumps
Date: Mon, 08 Dec 2003 09:44
Date: Mon, 08 Dec 2003 09:44
54 lines
2898 bytes
2898 bytes
Johan wrote:
> hey iedereen,
>
> iedereen weet (c/c++ programmeur) dat je data van een bestand
> rechtstreeks in een struct kan laden. dus een struct als een buffer
> gebruiken.
>
> weet iemand hoe ik dit kan klaarspelen in c#?
> ik gebruik een filestream met daarrond een binaryreader,
> maar de .read methode van binaryreader verwacht een byte[] buffer.
> casten help niet, dan krijg ik foutmeldingen omdat "struct test" niet
> kan geconverteerd worden naar byte [].
Je zou eens een blik kunnen werpen op XmlSerializer.
Stel, je hebt een class Settings als volgt:
public class Settings
{
public int a,b,c,d;
public byte [] data;
public string s;
};
En je hebt
Settings s;
Dan kun je s wegschrijven in een bestand "Config.Xml" m.b.v.
//OPGEPAST - NIET GETESTE CODE
StreamWriter myWriter =new StreamWriter("Config.Xml",false);
XmlSerializer mySerializer =new XmlSerializer(typeof(Settings));
mySerializer.Serialize(myWriter, s);
Inlezen gaat dan met:
//OPGEPAST - NIET GETESTE CODE
FileInfo fi = new FileInfo("Config.Xml");
if(fi.Exists) {
FileStream myFileStream = fi.OpenRead();
XmlSerializer mySerializer = new XmlSerializer(typeof(Settings));
s = (OurSettings)mySerializer.Deserialize( myFileStream);
}
Alle error handling moet natuurlijk nog toegevoegd worden, en een Close van
de FileStream ook...
Voordeel is dat je eender welke Xml Viewer (bv. Internet Explorer) kunt
gebruiken om je gegevens te bekijken.
Nadeel is dat alles tussen text en binary moet worden geconverteerd. Maar
voor 1 miezerige struct kan dat geen bezwaar zijn. Als je echter een paar
miljoen van deze structs moet schrijven/lezen kun je misschien beter naar
wat anders uitkijken...
Luc K
struct als buffer (c#)
Author: Johan
Date: Mon, 08 Dec 2003 10:48
Date: Mon, 08 Dec 2003 10:48
5 lines
1219 bytes
1219 bytes
wel, ik kan zonder problemen inlezen in een byte[] array, serializen, maar deserializeren gaat dan ook enkel maar naar een byte[] array. als ik iets anders gebruik krijg ik een invalidcastexception... groeten johan
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads