Jag håller på att utveckla en klient som ska prata med en hårdvara via TCP/IP. Nu vet jag inte om det finns något inbyggt/färdigskrivet, men...Skapa dataström utifrån struct
Som klienten är byggd nu byggs det upp massa olika structurer med data och sedan skickas värde för värde till hårdvaran. Jag vill förenkla programmet (det är inte jag som byggde det från början) och vill kunna serialisera strukturena och skicka hela strukturen på en gång. Går det?
Normalt när man använder System.Runtime.Serialization.Formatters.Binary.BinaryFormatter kommer massa annan information med i dataströmen. Jag vill helt enkelt få en dataström med enbart den informationen som finns i strukturen.
Här är exempel på en struct:
struct point
{
ushort size;
char[] name;
}
struct init
{
uint size;
uint command;
uint count;
point[] points;
}
Detta ska resultera i en dataström som ser ut som följer:
<code>
Bytes Värde
********************************
4 size
4 command
4 count
2 points[0].size
points[0].size points[0].name
2 points[1].size
points[1].size points[1].name
...
2 points[count-1].size
points[count-1].size points[count-1].name
</code>
Det hade varit bra om det går att göra åt andra hållet också med den datan som kommer från hårdvaran.
Sv: Skapa dataström utifrån struct
Det där är ju kod som du enkelt kan skriva själv med hjälp av reflection-apierna i .net. I princip någonting såhär:
1) typeof(min_struct_typ) ger en instans av en Type för den structen
2) På det type-objektet finns det metoder för att få fram t.ex. alla variabler (fields) för structen, och du kan få fram datatyper, namn etc. därifrån
3) För arrayer får du skriva någon egen hantering precis som du beskrev
4) sizeof(int, long, char etc.) ger dig en integer med hur många bytes som den värdetyp du stoppade in kräver för att lagras
Sedan är det bara att med hjälp av loopar å annat kul köra igenom alltihopa åt båda hållen