Binäredateien BigEndian
lima-city → Forum → Programmiersprachen → Basic
ahnung
anzahl
bestimmten stelle
byte
catch
dan
datei
daten
decoder
dokument
encoding
exit
format
komplex
lese
lsung
single
sttigung
test
verschlsselung
-
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
Coh3r3nTAbstimmung (Nur eine Auswahl möglich)
0 % (0 Stimmen) 0 % (0 Stimmen) 100 % (2 Stimmen) 0 % (0 Stimmen) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage