String umwandeln in Binary ?

Anfängerfragen zum Programmieren mit PureBasic.
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

String umwandeln in Binary ?

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: String umwandeln in Binary ?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: String umwandeln in Binary ?

Beitrag 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.
Zuletzt geändert von Simon74 am 05.05.2014 11:51, insgesamt 1-mal geändert.
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: String umwandeln in Binary ?

Beitrag 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..
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: String umwandeln in Binary ?

Beitrag von _sivizius »

kannst du das bitte als hex ausgeben?
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: String umwandeln in Binary ?

Beitrag 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.
Zuletzt geändert von Simon74 am 04.05.2014 22:21, insgesamt 1-mal geändert.
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: String umwandeln in Binary ?

Beitrag 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 ?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: String umwandeln in Binary ?

Beitrag 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))
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Simon74
Beiträge: 60
Registriert: 04.05.2014 10:05

Re: String umwandeln in Binary ?

Beitrag 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..
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: String umwandeln in Binary ?

Beitrag 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.
Antworten