![]() |
Re: Hex to String
Ich verstehe nun echt nicht, warum du statt deiner funktionierenden Delphi-Funktion auf einmal auf dem Trichter bist, auf Biegen und Brechen eine DLL mit einer anderen Sprache erstellt verwenden zu müssen. Vor allem für so eine simple Aufgabe - es gibt genau keinen Grund dafür. Das grundlegende Problem ist vermute ich noch immer, dass du nach wie vor noch nicht dahinter gestiegen bist, dass man zwischen Wert und seiner Darstellung unterscheiden muss, und dass Strings generell für dein Vorhaben einfach keine sinnvolle Wahl sind. Lass doch Strings einmal gänzlich aussen vor! (Wodurch kamst du eigentlich ursprünglich darauf, dass das Strings sein müssten?)
|
Re: Hex to String
wenn du 0-bytes bzw. steuerzeichen ausgeben willst, kannst du keinen string (auch kein PChar) nehmen, sondern musst auf ein binäres format umsteigen (z.b. array of byte oder TMemoryStream). Die geschichte mit der dll würde ich komplett außer acht lassen, da du damit nur Probleme bekommen wirst.
ungefähr so (ungetested):
Delphi-Quellcode:
HTH Frank
ms:TMemoryStream;
ch:string[2]; b:byte; i,c:integer; ms:=TMemoryStream.create; if odd(length(s)) then s:='0'+s; c:=length(s) div 2; for i:=0 to c-1 do begin ch:=copy(s,i*2+1,2); b:=StrToInt('$'+ch); ms.write(b,1); end; ms.savetoFile('bin.dat'); ms.free; |
Re: Hex to String
Ja ich bin folgendermaßen auf den Trichter gekommen, weil ich in VB einen Quellcode habe der mit einem Server komuniziert.
Das wollte ich eigentlich zum größten Teil so übernehmen und auf Delphi halt anpassen. Und jetzt habe ich eine Function fertig jetzt fängt das ganze spielchen wieder von vorne. Ich habe nämlich noch mehr functionen die ich brauche:
Code:
Wenn ich die jetzt alle in Delphi umschreibe bin ich alt und grau.
Public Function StringToHex(sMessage As String) As String
Dim i As Integer Dim sHex As String For i = 1 To Len(sMessage) sHex = Hex(Asc(Mid(sMessage, i, 1))) If Len(sHex) < 2 Then sHex = String(2 - Len(sHex), "0") & sHex StringToHex = StringToHex & sHex Next End Function Public Function LongToUnsigned(value As Long) As Double If value < 0 Then LongToUnsigned = value + 4294967296# Else LongToUnsigned = value End If End Function Public Function HexToString(sMessage As String) As String Dim i As Integer For i = 1 To Len(sMessage) Step 2 HexToString = HexToString & Chr(Int("&h" & Mid(sMessage, i, 2))) Next End Function Private Function longToHex(l As Long) As String longToHex = Hex(l) If Len(longToHex) < 4 Then longToHex = String(4 - Len(longToHex), "0") & longToHex longToHex = Right(longToHex, 2) & Left(longToHex, 2) End Function Private Function HexToDec(HexNumber As String) As String Dim i As Long Dim sHexChar As String Dim lLength As Long Dim lPosiValue As Double Dim Number As Double lLength = Len(HexNumber) For i = lLength To 1 Step -1 sHexChar = Mid(HexNumber, i, 1) lPosiValue = HexToDecChart(sHexChar) * (16 ^ (lLength - i)) Number = Number + lPosiValue Next HexToDec = Number End Function Private Function HexToBinChart(HexCode As String) As String Select Case UCase(HexCode) Case "0": HexToBinChart = "0000" Case "1": HexToBinChart = "0001" Case "2": HexToBinChart = "0010" Case "3": HexToBinChart = "0011" Case "4": HexToBinChart = "0100" Case "5": HexToBinChart = "0101" Case "6": HexToBinChart = "0110" Case "7": HexToBinChart = "0111" Case "8": HexToBinChart = "1000" Case "9": HexToBinChart = "1001" Case "A": HexToBinChart = "1010" Case "B": HexToBinChart = "1011" Case "C": HexToBinChart = "1100" Case "D": HexToBinChart = "1101" Case "E": HexToBinChart = "1110" Case "F": HexToBinChart = "1111" End Select End Function Private Function HexToDecChart(HexCode As String) As Long Select Case UCase(HexCode) Case "0": HexToDecChart = 0 Case "1": HexToDecChart = 1 Case "2": HexToDecChart = 2 Case "3": HexToDecChart = 3 Case "4": HexToDecChart = 4 Case "5": HexToDecChart = 5 Case "6": HexToDecChart = 6 Case "7": HexToDecChart = 7 Case "8": HexToDecChart = 8 Case "9": HexToDecChart = 9 Case "A": HexToDecChart = 10 Case "B": HexToDecChart = 11 Case "C": HexToDecChart = 12 Case "D": HexToDecChart = 13 Case "E": HexToDecChart = 14 Case "F": HexToDecChart = 15 End Select End Function Deshalb das mit der DLL, da ich den Code ja habe nur halt in VB. |
Re: Hex to String
Alle dieser Funktionen lassen sich mit Delphi-Bordmitteln (+ evtl. hier und da ein Kniff) in 1-3 Zeilen jeweils lösen. Schau dir doch einfach mal die Konvertierungsroutinen in der OH an!
Und selbst wenn man es selbst übersetzen wollte, ist das o.g. wohl mehr ne Aufgabe von max. nem Stündchen als von Jahren. |
Re: Hex to String
Die Funktionen sind grösstenteils unnötig bzw. schon in Delphi vorhanden.
|
Re: Hex to String
fertige Funktionen zur Zahlensystem-Umrechnung findest du hier im Forum, teilweise sogar in delphi vorhanden (StrToInt [Str/Hex=>Int],IntToStr,IntToHex)...du musst nicht alles neu schreiben.
dlls sind für einfache routinen und rückgabewerte sinnvoll. in dem Moment, wo du mit Strings, Speicherbereichen oder gar Objekten hantieren musst, sind sie umständlich bzw. kaum bis gar nicht zu gebrauchen. entweder mach alles in VB, scheib die bytes in eine Datei und setze dann dort mit einer separaten Delphi-Anwendung an, oder mach alles in Delphi. du machst dir mehr arbeit, die DLL einzubinden und lauffähig zu bekommen (mal abgesehen von Fehlern die durch ungültige Speicherzugriffe entstehen) als wenn du die verabeitung gleich in einem Programm machst. server === Hex-String ===> VB (verabeitung/Umwandlung) ==== temporäre Datei====> Delphi (Auswerten der bytes in der Datei) irgendwann kannst du dann die Server-Kommunikation auch in delphi implementieren um den Umweg über die Datei zu verhindern. somit hält sich dein aktueller Arbeitsaufwand in Grenzen, solange du noch nicht so fit in delphi bist. HTH Frank |
Re: Hex to String
Aber wie mache ich z.b. ne funktion für inttohex?
|
Re: Hex to String
Genau die gibt es schon in Delphi, unter gleichen Namen. Nutze die Hilfe. Schau in der Hilfe mal nach ähnlichen Ergebnissen. Schau nach, was in der jeweiligen Unit noch deklariert ist. etc.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz