Seite 1 von 2

String umwandeln in Binary ?

Verfasst: 04.05.2014 10:16
von Simon74
Hallo

ich sollte eine Mischung aus Datum, Zeit in Binary Format in eine Datei schreiben,
den String im Aufbau anzupassen das dieser untenstehender Anforderung (93/10/13 12:45:00) entspricht gelingt mir, jedoch die Umwandlung nicht.

Die Anforderung (Beschreibung):
start_time: This 40-bit field contains the start time of the event in Universal Time, Co-ordinated (UTC) and Modified
Julian Date (MJD) (see annex C). This field is coded as 16 bits giving the 16 LSBs of MJD followed by 24 bits coded as
6 digits in 4-bit Binary Coded Decimal (BCD). If the start time is undefined (e.g. for an event in a NVOD reference
service) all bits of the field are set to "1".
EXAMPLE 1: 93/10/13 12:45:00 is coded as "0xC079124500".
Wie am besten ?
Danke für Hilfe

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 11:53
von STARGÅTE
Vllt wäre eine Vollständige Quelle zu diesem Thema sinnvoll.

Wenn ich mir die Informationen selbst zusammen suche:
Modifiziertes Julianisches Datum
Binary Coded Decimal

Du wandelst also erst das Datum in ein modifiziertes Julianisches Datum um, und dann einfach mit der Beschreibung in die 40Bit-Form, also die Zeit in 6 BCDs und die Tage als Word:

Code: Alles auswählen

Procedure Example(Date.i)
	
	Protected Time.i = Val("$"+FormatDate("%hh%ii%ss", Date))
	
	ProcedureReturn (Int(date/(60*60*24))+40587)<<24 | Time
	
EndProcedure

Debug Hex(Example(Date(1993, 10, 13, 12, 45, 00)))
Bin mir aber nicht ganz sicher, ob dieser Offset zum Unix-TimeStamp stimmt.

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 11:59
von Simon74
Mal sehen ob ich so weiterkomme, danke.
Andere Werte habe ich einfach per WriteAsciiCharacter geschrieben, funktioniert mit der starttime jedoch leider nicht so einfach.

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 14:19
von Simon74
Ich komme hier nicht wirklich weiter, ich kann jedoch Beispiele nennen wie Sie in der ASCII Datei landen sollten (jeweils 2. Zeile).

01.01.2000 00:00

Code: Alles auswählen

EXNULNULNUL
03.05.2010 08:00

Code: Alles auswählen

ØETBNULNULNUL
03.05.2010 17:00

Code: Alles auswählen

ØETBDC2NULNUL
01.03.2014 11:00

Code: Alles auswählen

ÝDC1NULNUL
01.03.2014 19:00

Code: Alles auswählen

ÝCANNULNUL
01.03.2013 19:00

Code: Alles auswählen

ÝEMNULNUL
01.03.2013 09:00

Code: Alles auswählen

Ü EMNULNUL
01.03.2013 09:14

Code: Alles auswählen

Ü TABDC4NUL
wobei bei letztem Beispiel TAB als Symbol erscheint..

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 19:07
von _sivizius
kannst du das bitte als hex ausgeben?

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 19:22
von Simon74
Ich denke ich habe es nun verstanden,
der HEX Code besteht aus 10 Stellen,
es werden aber nur die ersten 8 Stellen (also ohne die Sekundenwerte),
jeweils 2Stellen der ASCII-Character in die Datei geschrieben.

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 22:18
von Simon74
Bleibt die Frage wie ich das am besten anstelle so das ich per "WriteAsciiCharacter" in die Datei schreiben kann ?
hex -> ascii -> chr, oder geht das einfacher ?

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 23:01
von STARGÅTE
Was willst du in die Datei schreiben?
Wenn du den HEX-Wert als Klartest hineinschreiben willst dann wäre das:

Code: Alles auswählen

Value.q = $C079124500
WriteString(File, RSet(Hex(Value), 10, "0"))
Wenn du stattdessen die BinäreForm haben möchtest, kannst du im Prinzip dein Wert (wenn er 40Bit hat, passt er in eine Quad rein) in eine Quad speichern und dann 40Bit (also 5 Byte) in die Datei schreiben:

Code: Alles auswählen

Value.q = $C079124500
WriteData(File, @Value, 5))

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 23:21
von Simon74
STARGÅTE hat geschrieben:Was willst du in die Datei schreiben?
Den Hexwert (nur die ersten 8 Stellen) als ASCII Char-Character.
Also jeweils 2 Stellen, 1 ASCII-Symbol.
Insgesamt 4 ASCII Werte.

Code: Alles auswählen

value.q D80E182505
$D8 -> Ø
$0E -> SO
usw..

Re: String umwandeln in Binary ?

Verfasst: 04.05.2014 23:37
von NicTheQuick
Also zwei Hexziffern entsprechen genau einem ASCII-Zeichen. Deswegen ist es unlogisch, dass $D8 ein Zeichen ergibt und $0E zwei Zeichen ergeben soll. Das ist kein Format, was mir bekannt wäre.