German Datalogger "Rohdaten" speichern

hangloose99

Member
Licensed User
Longtime User
Hallo,

ich möchte gerne Rohdaten welche ich in einem Byte Array vorliegen habe in eine Datei auf der SD Karte speichern. Die Werte sollen je einen Wert zwischen 0-255 haben. Das ganze mache ich mit dem Stringbuilder und
sieht in etwa so aus...

strlog = BytesToString (data,0, data.length, "ISO-8859-1")
sb.Append(strlog)
strLog = sb.ToString

Die Stringgröße wird als 1 angezeigt. Stimmt also bis hierher.

Mein Problem ist nun folgendes...
Angenommen ich schreibe nun einen Wert z.B. 170 auf die SD Karte schreibt er mir 2 Bytes in die Datei. Wobei der zweite Wert der richtige ist.
Bei einem "druckbaren" Wert wie z.B. 65 schreibt er korrekt nur ein Byte in die Datei.
Bei UTF-8 und Wert 170 schreibt er mir sogar 3 Bytes anstatt 1.

File.WriteString(strPath, strFileName ,strLog)

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Gibt es eine Möglichkeit die reinen "Rohdaten" auf die SD Karte zu schreiben.
Oder muss ich die Daten in HEX oder einen ASCII Zahlenwert umwandeln?

In der Doku von String steht:
You should not use strings to hold binary data. You should use a bytes array. Strings cannot hold all the possible values.

Daher befürchte ich fast das es nicht geht?! oder?

Vielen Dank und Gruß
 

rboeck

Well-Known Member
Licensed User
Longtime User
Hallo,

ich denke, dass dies eine Folge der Zeichensatzumwandlung ist. Zuerst würde ich nachsehen, welchen Zeichensatz der Absender verwendet und diesen dann bei der BytestoString Funktion einsetzen; wenn das alles nicht klappt, könnte man noch immer mit select case eine eigene Konverterroutine schreiben. Anbei eine Diskussion, die das Ganzen vielleicht auch beleuchtet:
http://www.b4x.com/forum/basic4andr...b-bytestostring-ibm850-umlauts.html#post45645

Grüße
Reinhard
 

hangloose99

Member
Licensed User
Longtime User
Hallo Reinhard,

danke für die Antwort.

Egal welchen Zeichensatz ich bei der BytesToString Funktion angebe, funktioniert es leider nicht.
Ich habe erstmal keinen "Sender" Ich erzeuge ein Array mit den Werten 0-255
welches ich dann in einen String schreibe.
Für die Werte 0-127 schreibt er die Werte richtig als je ein Byte in das File.

Problem ist wenn ein Bytewert größer 127 ist, schreibt er mehrere Bytes in das File

Wie soll das mit der Konvertierroutine funktionieren?
Will ja kein anderes Zeichen darstellen. Will ja nur Werte
>127 in einer Datei speichern.

Steh auf dem Schlauch!
Oder es geht einfach nicht :-(

Gruß Peter
 

monki

Active Member
Licensed User
Longtime User
Hallo Hangloose99,

schau dir mal die Lib RandomAccessFile an, da kannste mit
WriteByte in ein File schreiben

monki
 
Top