kostenloser Webspace werbefrei: lima-city


Binäredateien BigEndian

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    coh3r3nt

    coh3r3nt hat kostenlosen Webspace.

    So hi,

    ich suche schon seit mehreren Tagen nach der Lösung meines Problems. Folgendes Szenario. Ich hab Messdaten in einer Binärdatei,
    die ich mit meinem Programm weiterverarbeiten möchte. Die Daten sind mit LabView geschrieben und deshalb im BigEndian-Format (16Bit +Word).

    Ich lese mit meinem Code alles wunderbar ein , bis zu einer bestimmten Stelle:

    Dim i as Integer
      Dim c(1600) As Single
      Dim encoding As System.Text.Encoding = System.Text.Encoding.BigEndianUnicode
      fs = New FileStream("a34.bin", FileMode.Open)
      bw = New BinaryReader(fs, encoding)
    'Header lesen
      nbin = bw.Read      ' anzahl an binnings pro acquisiton
      npixel = bw.Read    ' anzahl an pixel pro binning
      nacq = bw.Read      ' anzahl an acquisitions
    'Daten lesen
    	Try
    	For ipixel = 1 To npixel
            c(ipixel) = bw.Read
        Next ipixel 
        Catch e As Exception
            Console.WriteLine("LaRC-file format error: " & e.ToString)
            Exit Sub
        End Try


    Es funktioniert bis zu einer gewissen Position. Bis dahin bekomme ich auch die richtigen Werte heraus
    (das habe ich mit einem HexEditor überprüft). Aber an einer Stelle steht der Wert D8E9 (bzw. in dezimal: 55529). Und
    ich bekomme eine Exception:


    System.ArgumentException: Der Ausgabe-Zeichenpuffer zu klein für die verschlüsselten Zeichen. Verschlüsselung von Uni
    code (Big-Endian) in Ausweichposition System.Text.DecoderReplacementFallback.
    Parametername: chars
    bei System.Text.Encoding.ThrowCharsOverflow()
    bei System.Text.Encoding.ThrowCharsOverflow(DecoderNLS decoder, Boolean nothingDecoded)
    bei System.Text.UnicodeEncoding.GetChars(Byte* bytes, Int32 byteCount, Char* chars, Int32 charCount, DecoderNLS baseD
    ecoder)
    bei System.Text.DecoderNLS.GetChars(Byte* bytes, Int32 byteCount, Char* chars, Int32 charCount, Boolean flush)
    bei System.Text.DecoderNLS.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount, Char[] chars, Int32 charIndex, Bo
    olean flush)
    bei System.Text.DecoderNLS.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount, Char[] chars, Int32 charIndex)
    bei System.IO.BinaryReader.InternalReadOneChar()
    bei System.IO.BinaryReader.Read()
    bei test.Module1.Main() in C:\Dokumente und Einstellungen\...\test
    .vb:Zeile 58.



    Hui, sehr komplex das ganze. Ich kann euch die Datei auch zum download stellen, wenns jemand testen will. Ich weis, dass man das
    mit dem Encoding nur bei Unicode-Daten verwenden sollte, aber bei mir funktionierte das ganze solange, bis große Werte auftraten
    (die CCD-Camera ist in Sättigung gegangen, wenns jemand wissen will).
    Evtl. wäre es besser das umcodieren in BigEndian selber zu übernehmen. Also ohne Encoginh ReadUInt16 verweden und dan bitmässig umdrehen.
    Aber da hab ich keine Ahnung wie man das macht. Kann mir dabei jeamand helfen ?


    greets
    Coh3r3nT

    Abstimmung (Nur eine Auswahl möglich)

    0 % (0 Stimmen)
    0 % (0 Stimmen)
    100 % (2 Stimmen)
    0 % (0 Stimmen)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!