Avatar billede sandrasmurf Nybegynder
18. juli 2011 - 16:10 Der er 4 kommentarer og
1 løsning

Afkode byte array

Hej eksperter

Jeg vil gerne læse indholdet af et OLE-Object kolonne fra Microsoft Access via OleDB og derefter benytte en binær format specifikation til at (forsøge at) få data ud af feltet.

Jeg har søgt på forskellige emner i google, men har svært ved at overskue hvordan min udfordring klares bedst.

OleDbDataReader reader = dbCommand.ExecuteReader();
while (reader.Read()) // Iterate throuth the results
{
  byte[] shapeByteData = (byte[])reader[1];
}

Jeg har castet OLE-Objekt feltet til et byte array og det vil den gerne. Men nu skal jeg konvertere de første 4 bytes til en integer. Derefter skal jeg læse 4 doubles. osv.

Formatet er beskrevet i denne pdf på side 8:
http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Er der en smart stream eller fremgangsmåde, der vil kunne hjælpe mig. Det må meget gerne være effektiv kode (læs hurtig).
Avatar billede Michael Johansen Nybegynder
18. juli 2011 - 17:36 #1
Jeg ville smide shapeByteData ind i en MemoryStream:
http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx#Y275

Constructoren kan tage dit array.
Derefter bruge en BinaryReader:
http://www.dotnetperls.com/binaryreader

Her kan du så læse de type ud som du vil.
Avatar billede Michael Johansen Nybegynder
18. juli 2011 - 17:41 #2
...lidt kode:

using System.IO;



using (MemoryStream mem = new MemoryStream(shapeByteData))
{
  using (BinaryReader bin = new BinaryReader(mem))
  {

    int i = bin.ReadInt32();
    double d = bin.ReadDouble();
o.s.v.
  }
}
Avatar billede arne_v Ekspert
18. juli 2011 - 22:01 #3
Vil du have et OLE objekt eller alle bytes fra en grafik fil ud?
Avatar billede sandrasmurf Nybegynder
19. juli 2011 - 13:58 #4
Coderboy. Det ser nemt og overskueligt ud. Og det virker faktisk fint.

Spørgsmålet er så om det er den mest effektive måde at gøre tingene på. Måske kan Arne byde ind med noget på den konto. Jeg ved ikke om jeg har brug for et OLE objekt eller bytes. De eneste eksempler jeg fandt trak bytes ud af OLE Objekt kolonnen.

Som sagt er formålet at kunne læse doubles og integers ud fra ESRI specifikationen.
Avatar billede Michael Johansen Nybegynder
20. juli 2011 - 01:09 #5
Den metode jeg har vist dig, er for at gøre det nemt, men klart, en smukkere måde ville være at få det mappet over i en struct der passer til din specifikation (har ikke læst spec'en).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester