vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Umwandeln von Hexwert in String 
Autor: effeff
Datum: 12.04.14 14:23

FZelle schrieb:
Zitat:

Naja, wenn du mal genau hinschaust, siehst du das jeder 2.
Wert 00 ist, also ist das Unicode.
Du nimmst aber immer 2 Zeichen, und hast dann immer eine
Nullterminierung.


Sicher, aber warum wird die Variable nicht weiter gefüllt, während der Inhalt einer Textbox problemlos editiert wird? In der Variablen wird nur der allererste Wert angezeigt, während die Textbox die komplette Textzeile anzeigt?

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Umwandeln von Hexwert in String 
Autor: effeff
Datum: 11.04.14 15:59

Moin,

ich wandle einen Hexwert aus der Registry in einen String um... Zumindestens versuche ich das - und weiß nicht, warum ich scheitere...

Also: Der Hexwert "43003a005c00550073006500720073005c007
30079007300610064006d0069006e002e006c00650065007200300031005c0
041007000700044006100740061005c0052006f0061006d0069006e0067005c004
400650073006b0074006f0070005c00530079007300460069006c00650073000000"
soll eigentlich einen String "C:\users..." (Einen Verzeichnispfad) ergeben. Ich kann machen, was ich will, ich bekomme immer nur "C" heraus:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button1.Click
        Dim hex As String = "43003a005c00550073006500720073005c00730079007300610
064006d0069006e002e006c00650065007200300031005c0041
007000700044006100740061005c0052006f0061006d0069006e00
67005c004400650073006b0074006f0070005c00530079007300460069006c00650073000000"
        MessageBox.Show(HexToStr(hex))
    End Sub
 
    Public Function HexToStr(ByVal Data As String) As String
        Dim com As String
        Dim i As Integer
        For i = 0 To Data.Length - 1 Step 2
            com &= ChrW(CInt("&H" & Data.Substring(i, 2)))
        Next
        Return com
    End Function
Das irre: Lasse ich mir mit einer kleinen Änderung die einzelnen Buchstaben anzeigen, bekomme ich vernünftige Werte:

        For i = 0 To Data.Length - 1 Step 2
            Messagebox.Show(ChrW(CInt("&H" & Data.Substring(i, 2))))
        Next
Woraus erklärt sich denn, dass die Variable "com" nicht um jeweils den nächsten Buchstaben erweitert wird?

Auch irre: Wenn ich den Inhalt einer Textbox jeweils um den Buchstaben erweitern lasse, funktioniert das auch...

        For i = 0 To Data.Length - 1 Step 2
            Textbox1.text=Textbox1.Text & ChrW(CInt("&H" & Data.Substring(i, _
              2))))
        Next

EALA FREYA FRESENA

Beitrag wurde zuletzt am 11.04.14 um 16:04:43 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: Manfred X
Datum: 11.04.14 16:59

Hallo!

Du initialisierst "Com" nicht als Leerstring.
Das Schleifenende paßt nicht.
Ich schlage Stringbuilder vor.
   Dim hex As String = _
    "43003a005c00550073006500720073005c00730079007300610064006d0069006e002" & _
    "006c00650065007200300031005c0041007000700044006100740061005c0052006f0" & _
    "61006d0069006e0067005c004400650073006b0074006f0070005c005300790073004" & _
    "0069006c00650073000000"
 
    Dim com As String = ""
    Dim i As Integer
    Dim stb As New System.Text.StringBuilder(hex.length)
 
    For i = 0 To hex.Length - 3 Step 2
       stb.Append(ChrW(CInt("&H" & hex.Substring(i, 2))))
    Next i
 
    com = stb.ToString


Beitrag wurde zuletzt am 11.04.14 um 17:04:00 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: GPM
Datum: 11.04.14 17:08

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles _
      Me.Load
        Dim hex As String = _
                    "43003a005c00550073006500720073005c00730079007300610064006" & _
                    "00" & _
                    "69006e002e006c00650065007200300031005c0041007000700044006" & _
                    "00" & _
                    "740061005c0052006f0061006d0069006e0067005c004400650073006" & _
                    "00" & _
                    "74006f0070005c00530079007300460069006c00650073000000"
        MessageBox.Show(HexToStr(hex))
    End Sub
 
    Public Function HexToStr(ByVal Data As String) As String
        Dim com As String = ""
        For i As Int32 = 0 To Data.Length - 3 Step 4
            com &= ChrW(CInt("&H" & Data.Substring(i, 2)))
        Next
        Return com
    End Function
End Class
MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: ModeratorFZelle (Moderator)
Datum: 11.04.14 23:52

Naja, wenn du mal genau hinschaust, siehst du das jeder 2. Wert 00 ist, also ist das Unicode.
Du nimmst aber immer 2 Zeichen, und hast dann immer eine Nullterminierung.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: effeff
Datum: 12.04.14 14:25

Manfred X schrieb:
Zitat:

Du initialisierst "Com" nicht als Leerstring.
Das Schleifenende paßt nicht.
Ich schlage Stringbuilder vor.


Moin,

im Ursprungsbeispiel war der Stringbuilder mit einhalten und auch die Append-Methode. Aber auch das funktionierte nicht.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: Manfred X
Datum: 12.04.14 15:48

Hallo!

Es stehen zwar an jeder 2. Stelle nicht-darstellbare ASCII-0 im Builder
und im String - spricht also alles für Unicode - aber die Zeichenfolge
ist vorhanden.

Der von Dir verwendete String-Viewer interpretiert offenar die erste 0
(hinter dem Laufwerks-C ) als Ende der Zeichenfolge im Sinne einer
null-terminierten Zeichenfolge (worauf FZelle bereits hingewiesen hat).

MfG
Manfred





Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: effeff
Datum: 12.04.14 18:27

Moin,

so hatte ich das auch verstanden. Aber interessant ist dennoch, dass, wenn ich die Variable füllen will, dann nur das erste Zeichen angezeigt wird, doch wenn ich eine Textbox direkt befülle (Textbox1.Text=Textbox1.Text & ...) erscheint der komplette Text dort. Das fand ich interessant und das war der Ursache meiner Frage. Unicode ist übrigens tatsächlich schuld, denn eine andere Hex-Zeichenfolge kann problemlos umgewandelt werden. Die Textbox interessiert also die Null terminierte Zeichenfolge überhaupt nicht, während die Variable abriegelt.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: Manfred X
Datum: 12.04.14 18:56

Der String enthält die "nicht-darstellbaren" Null-ASCIIs.

Was daraus im weiteren wird (Display usw.), entscheidet die Software,
die diesen String verarbeitet.

Im Prinzip könnte 0 auch als NUL (oder als eine Ersatzdarstellung), als
Leerzeichen oder nicht angezeigt werden. Und ebenso ist der Abbruch einer
Lese-Operation beim Auftreten von 0 möglich.
Entsprechendes gilt für alle ASCII-Sonderzeichen. Obwohl sie jeweils
eine "definierte Bedeutung" als Steuerzeichen haben, kann man nicht
vorhersehen, wie ihre Verarbeitung in einem Programm tatsächlich erfolgt,
man muß es ausprobieren.




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: ModeratorFZelle (Moderator)
Datum: 13.04.14 11:59

http://en.wikipedia.org/wiki/Null-terminated_string
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: effeff
Datum: 13.04.14 14:01

Interessanter Artikel. Danke schön!

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: effeff
Datum: 13.04.14 14:02

Ja, offensichtlich können Variablen damit im Gegensatz zu Steuerelementen nicht betankt werden. Danke schön für Deine Erklärung!

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: eierlein
Datum: 13.04.14 15:04

Versuch's mal so:

 Public Function HexToStr(ByVal Data As String) As String
        Dim com As String
        Dim i As Integer
        For i = 0 To Data.Length - 1 Step 4
            com &= ChrW(CInt("&H" & Data.Substring(i + 2, 2) & Data.Substring( _
              i, 2)))
        Next
        Return com
    End Function
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Umwandeln von Hexwert in String 
Autor: us4711
Datum: 13.04.14 23:09

Meine Lösung:
Function StringFromHexText(ByVal HexText As String) As String
        Dim Bytes As New List(Of Byte)
        For Index As Integer = 0 To HexText.Length - 1 Step 2
            Bytes.Add(Convert.ToByte(HexText.Substring(Index, 2), 16))
        Next
        Return System.Text.Encoding.Unicode.GetString(Bytes.ToArray)
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

@ GPM, eierlein und us4711... 
Autor: effeff
Datum: 14.04.14 10:08

Hallo,

schönen Dank für Eure Lösungen.

Ich habe mich wahrscheinlich etwas falsch ausgedrückt, aber gesucht habe ich nicht unbedingt eine Lösung für dieses Problem, sondern eine Begründung - und die haben FZelle und Manfred X eindeutig beschrieben.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel