VB 6.0: Datei binär schreiben

Hallo Leute,

ich muss eine Datei binär aufbauen die normalerweise von einem
C++ Programm erstellt wird. Ich kenne die Dateistruktur, weiss jedoch nicht wie ich das mit VB (Datentypen??) machen muss.

V1 (Unsigned Short)
V2 (Unsigned Char)
V3 (String)
Flag1 (Unsigned Short
Bit 1 gesetzt = Info 1
Bet 2 gesetzt = Info 2
Bit 3 gesetzt = Info 3
Bit 0 und 4-7 sind ungenutzt)

Wie schreibe ich diese Werte binär mit VB in eine Datei ??

Danke für Eure Hilfe !

Tom

Hi Thomas!

ich muss eine Datei binär aufbauen die normalerweise von einem
C++ Programm erstellt wird. Ich kenne die Dateistruktur, weiss
jedoch nicht wie ich das mit VB (Datentypen??) machen muss.

V1 (Unsigned Short)
V2 (Unsigned Char)
V3 (String)
Flag1 (Unsigned Short
Bit 1 gesetzt = Info 1
Bet 2 gesetzt = Info 2
Bit 3 gesetzt = Info 3
Bit 0 und 4-7 sind ungenutzt)

Wie schreibe ich diese Werte binär mit VB in eine Datei ??

Mir ist im Moment nicht ganz klar, worauf du hinaus willst.
Brauchst du die zu C vergleichbaren Datentypen? Oder geht es um die Bit-Anknipserei? Oder um das Schreiben von Werten in eine Binärdatei?

Den Unsigned Short gibt es in VB als Datentyp „Byte“ (8-bit-Wert ohne Vorzeichen).

Das Bit-Anknipsen in einer Variablen erfolgt ganz simpel über die Wert-Zuweisung des entsprechenden Bit-Musters.

Bsp.:
'Variable deklarieren
Dim Flag1 as Byte

Flag1 = 1
'führt zum Bitmuster 0-0-0-0-0-0-0-1

Flag1 = 2
'führt zum Bitmuster 0-0-0-0-0-0-1-0

Flag1 = 3
'führt zum Bitmuster 0-0-0-0-0-0-1-1

Flag1 = 129
'führt zum Bitmuster 1-0-0-0-0-0-0-1

Abfragen kann man die Bit-Stellen über den AND-Operator, in dem man die Bit-Wertigkeit angibt:

IF Flag1 AND 1 …
'Dies fragt ab, ob das rechte Bit geschaltet ist. Außer im Beispiel 2 ist das der Fall.

IF Flag1 AND 2 …
'Hier treffen die Fälle 2 und 3 zu

IF Flag1 AND 128 …
'Hier wird nur das linke Bit geprüft - siehe Beispiel 129

'Interessant ist, dass man auch mehrere Bits auf einmal prüfen kann:

Flag1 = 14
'Bitmuster 0-0-0-0-1-1-1-0

IF Flag1 AND 6 …
'Das gibt einen Treffer, weil der 2er- und 4er-Bit geschaltet sind.

Das alles hat aber mit VB nix zu tun - ist Uralt-Basic.

Geschrieben wird der Sermon in eine binäre Datei wie folgt:

'Öffnen der Datei für Binär-Zugriff
Dim iDateiNr as Integer

'freies Handle für Datei holen
iDateiNr = FreeFile

'Datei öffnen
Open „C:\TEST\DATEI.BIN“ FOR BINARY AS #iDateiNr

'Schreibe Variable Flag1 an Position 1 in Datei
Put #iDateiNr, 1, Flag1

'Datei schließen
Close iDateiNr

Damit ist DATEI.BIN genau 1 Byte groß.
Willst du mehr und hintereinander schreiben, musst du die Schreibposition hochzählen

Auch das ist Uralt-Basic und hat mit VB nix zu tun!
:wink:)

Hope It Helps!
Heinrich

Hallo Thomas und Heinrich,

ich muss eine Datei binär aufbauen die normalerweise von einem
C++ Programm erstellt wird. Ich kenne die Dateistruktur, weiss
jedoch nicht wie ich das mit VB (Datentypen??) machen muss.

V1 (Unsigned Short)
V2 (Unsigned Char)
V3 (String)
Flag1 (Unsigned Short
Bit 1 gesetzt = Info 1
Bet 2 gesetzt = Info 2
Bit 3 gesetzt = Info 3
Bit 0 und 4-7 sind ungenutzt)

Wie schreibe ich diese Werte binär mit VB in eine Datei ??

Mir ist im Moment nicht ganz klar, worauf du hinaus willst.
Brauchst du die zu C vergleichbaren Datentypen? Oder geht es
um die Bit-Anknipserei? Oder um das Schreiben von Werten in
eine Binärdatei?

Dieses Problem habe ich auch.

Den Unsigned Short gibt es in VB als Datentyp „Byte“
(8-bit-Wert ohne Vorzeichen).

Hier muss ich wiedersprechen, in C sind die Datentypen je nach Compiler und CPU unterschiedlich gross.

char hat meistens 8 Bit
short meistens 16 Bit
int meistens 16 oder 32 Bit
long meistens 32 oder 64 Bit

Es ist durchaus erlaubt, dass short und int, bzw. int und long die gleiche Grösse haben. Es ist nur verboten, dass short > int und int > long ist.

Bei einigen Compilern kann die Grösse von int, meist 16 oder 32 Bit, eingestellt werden.

MfG Peter(TOO)

Na wunderbar…
…Ihr habt gerade rausgefunden, warum man heutzutage Daten in Datenbanken oder XML abspeichert.

:wink:

Ralph

ROTFLMAO!

Und du hast gerade belegt, warum man in der EDV grundsätzlich an der Aufgabenstellung vorbei redet und statt dessen das fachliche Problem mit Technik zu lösen versucht.

:wink:

Heinrich

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Eigentlich nicht
Das war nur eine nebenbeiWinkMitDemZaunpfahlsoSollteEsSeinDannPassiertSowasNichtNächstesMalVielleichtDranDenken-Anmerkung, da das Problem ja von den anderen von gelöst wurde, wie du vielleicht gesehen hast…

Ralph