AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hex to String

Ein Thema von XXcD · begonnen am 9. Apr 2008 · letzter Beitrag vom 11. Apr 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#31

Re: Hex to String

  Alt 11. Apr 2008, 14:06
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?)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#32

Re: Hex to String

  Alt 11. Apr 2008, 14:20
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:
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;
HTH Frank
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#33

Re: Hex to String

  Alt 11. Apr 2008, 15:38
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:
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
Wenn ich die jetzt alle in Delphi umschreibe bin ich alt und grau.
Deshalb das mit der DLL, da ich den Code ja habe nur halt in VB.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#34

Re: Hex to String

  Alt 11. Apr 2008, 15:45
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#35

Re: Hex to String

  Alt 11. Apr 2008, 15:46
Die Funktionen sind grösstenteils unnötig bzw. schon in Delphi vorhanden.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#36

Re: Hex to String

  Alt 11. Apr 2008, 15:53
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
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#37

Re: Hex to String

  Alt 11. Apr 2008, 15:59
Aber wie mache ich z.b. ne funktion für inttohex?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#38

Re: Hex to String

  Alt 11. Apr 2008, 16:00
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz