Konvertierung: Dezimalwert als Hexadezimal in einem String darstellen

xenon185

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,
Ich kämpfe gerade zwischen meinem Geist und Codesys. Eines von beiden kommt momentan nicht weiter ;/

Mein Vorhaben ist:
Eine Berechnete Checksumme über XOR gibt mir einen Dezimalwert wieder. (Beispiel dez 23)
Dieser Dezimalwert ergibt den Hexadezimalwert 17 hex.

Ab hier beginnt Mein Problem:
Ich möchte jetzt diesen Wert (“17“ als hex) an einen String anfügen um das Telegram fertigzustellen.
Das Telegramm sieht das als String in etwa so aus: $SD*17


Eigentlich kann es nicht so schwer sein, aber ich hänge da gerade.

Vielleicht kann mir einer von euch den entscheidenen Stups geben, freue mich auf hilfreiche posts .
Mfg
 
23 / 16 = 1 Rest 7

funktioniert natürlich nur für Dezimalzahlen bis 255 - darüberhinaus müßtest du dann halt erstmal / 256 rechnen.

Weiterhin dann noch 10 - 15 in A - F umwandeln - fertig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wenn es sich immer nur um ein Byte handelt, kannst Du auch ein Byte Array mit 16 Werten anlegen

char:Array [1..16] OF BYTE:=48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70;

Dann isolierst Du das High Nibble Byte_Hi:=SHR(Byte_Check,4); und das Low Nibble Byte_Lo:=Byte_Check AND 2#00001111;

Jetzt hast Du die beiden Zeichen über char[Byte_Hi+1] und char[Byte_Lo+1]

Gruß
 
@uncle_tom: thx, ich denke das wird mein weg werden. Wobei du sicher nicht 23/16 meintest sonder 23-16

ich werde mir eine Schleife basteln, die dann die Variable (x) in jedem durchlauf um 16 reduziert und eine var (i) um einen erhöhen lassen. So bekomme ich dann die höheren 4 bit's
Ist der Wert der Variable (x) dann kleiner, gleich 15 kommt dieser wert in eine andere var (z) und so habe ich dann beide Werte mit denen ich dann weiter arbeiten kann.
 
@thruser: ich glaub deine Variante habe ich jetzt erst Verstanden. Das sparrt mir sogar noch eine wenig mehr arbeit, thx. Und ja ich habe immer nur ein Byte : -> TOP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@thruser: Deine Variante Funktioniert perfekt und dazu sehr übersichtlich.
Ist zwar nicht zu dem Thema direkt aber hast du vielleicht noch eine Idee wie ich einen String bestehen aus x Zeichen XOR verknüpfen kann mit auch relativ wenig aufwand

z.B.

$HCMMG,2.2,,,F,5*CHECKSUM zwischen dem $ und dem * sollen alle Zeichen XOR verknüpft werden.


Danke, Mfg
 
Hi,

wußte ich doch daß das NMEA ist.

Sieh Dir mal die Funktion code oaus der oscat lib an. Mit der bekommst Du den ASCII Code eines Zeichens aus einem String an einer bestimmten Stelle. Das dann in eine Schleife packen.

Das oben geht natürlich auch mit WORD oder DWORD. Man muß nur mehr zerlegen.

Gruß
 
ok schau ich mir mal an.

Frage mal an euch: Wie übertrage ich ein "$" Zeichen?
Wenn ich ( TEXT:STRING := '$24'; ) eingeben bekomme ich immer als Ausgabe $$ also zwei Dollar zeichen. jemand eine Idee.
 
Zurück
Oben