none
Bytearray in String umwandeln.. RRS feed

  • Frage

  • Hi zusammen, ich bekomme von der Socket Schnittstelle ein Bytearray das z.B. so aussieht.
    0,60,0,47,0,65,0 ...

    ich versuche es nun mit ByteArrayToTextString

      Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
            Dim enc As System.Text.Encoding = System.Text.ASCIIEncoding.ASCII
            Return enc.GetString(Barr)
        End Function

    in einen String zu konvertieren. Problem ist, er mir es richtig konvertiert, nur die Nullen falsch interpretiert und die im String mit zurück gibt. Gibt es eine Funktionalität, die mir die Nullen vorher oder nachher entfernt?
    Gruss 

    Montag, 2. April 2012 07:56

Antworten

  • Hi, ja wenn es von Byte nach String konvertiert wurde ist es ein String, nur halt mit den Nullen drin. Ich habe im Internet jetzt noch was gefunden, was scheinbar klappt.

    Nicht alles, was nach String aussieht, ist auch einer. Was soll der Inhalt denn darstellen? Und wieso werden da Nullzeichen und keine Leerzeichen übergeben, wenn es doch eigentlich Leerzeichen sein sollen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Hallo Thomas,

    ja genau, ich möchte Stefan Recht geben. Man kann doch nicht so einfach mal eben die Nullen wegmachen, weil sie nicht in das Konzept passen. Derjenige, der die Daten liefert, muss sich dabei was gedacht haben. Gibt es vielleicht Doku? Jedenfalls über den Aufbau von Nutzdaten wird es in der msdn Doku wohl kaum etwas geben, weil diese Nutzdaten von jedem frei verwendbar sind.

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Montag, 2. April 2012 09:20

Alle Antworten

  • Thomas,

    evtl solltest Du nicht mit ASCII sondern mit Unicode arbeiten.

    Ändere doch mal die erste Zeile Code in Deiner Funktion zu:

    Dim enc As System.Text.Encoding = System.Text.Encoding.Unicode

    und schau was passiert.

    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Montag, 2. April 2012 08:05
  • Auch nicht schlecht , jetzt habe ich
    "㰀一䄀䬀㸀ഀ਀"
    als Ergebnis.

    Gruss

    Montag, 2. April 2012 08:09
  • Aber immerhin keine Nullen mehr ;-)

    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Montag, 2. April 2012 08:12
  • OK, Spaß beiseite:

    ändere Unicode in BigEndianUnicode. Nun sollte es funktionieren.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Montag, 2. April 2012 08:16
  • Hallo Thomas,

    was sollte denn deiner Meinung nach mit den Nullen rauskommen? Das kann vieles bedeuten. Bspw. wird damit auch mal ein String terminiert, d.h. dein String wird dort enden, wo das erste mal \0 auftritt. Andererseits kann es eine Bedeutung als Füllzeichen oder Steuerzeichen haben, ...

      http://de.wikipedia.org/wiki/Nullzeichen

    Ist das, was Du da bekommst, letztendlich überhaupt ein String?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 2. April 2012 08:20
    Moderator
  • Hi, ja wenn es von Byte nach String konvertiert wurde ist es ein String, nur halt mit den Nullen drin. Ich habe im Internet jetzt noch was gefunden, was scheinbar klappt.

        Dim enc As System.Text.Encoding = System.Text.ASCIIEncoding.ASCII
            Dim stext As String = enc.GetString(Barr)
            stext = stext.Replace(Chr(0), String.Empty)

    Gruss
    Montag, 2. April 2012 08:29
  • Hi, ja wenn es von Byte nach String konvertiert wurde ist es ein String, nur halt mit den Nullen drin. Ich habe im Internet jetzt noch was gefunden, was scheinbar klappt.

    Nicht alles, was nach String aussieht, ist auch einer. Was soll der Inhalt denn darstellen? Und wieso werden da Nullzeichen und keine Leerzeichen übergeben, wenn es doch eigentlich Leerzeichen sein sollen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 2. April 2012 09:11
    Moderator
  • Hi, ja wenn es von Byte nach String konvertiert wurde ist es ein String, nur halt mit den Nullen drin. Ich habe im Internet jetzt noch was gefunden, was scheinbar klappt.

    Nicht alles, was nach String aussieht, ist auch einer. Was soll der Inhalt denn darstellen? Und wieso werden da Nullzeichen und keine Leerzeichen übergeben, wenn es doch eigentlich Leerzeichen sein sollen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Hallo Thomas,

    ja genau, ich möchte Stefan Recht geben. Man kann doch nicht so einfach mal eben die Nullen wegmachen, weil sie nicht in das Konzept passen. Derjenige, der die Daten liefert, muss sich dabei was gedacht haben. Gibt es vielleicht Doku? Jedenfalls über den Aufbau von Nutzdaten wird es in der msdn Doku wohl kaum etwas geben, weil diese Nutzdaten von jedem frei verwendbar sind.

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Montag, 2. April 2012 09:20
  • Hi danke euch zusammen für eure Antworten.
    Wie ich Anfangs schon geschrieben hatte, lese ich diese Daten (über die Socket Schnittstelle) von einem ext. Gerät aus. Der liefert mir die Daten wirklich so wie ich es im ersten Beitrag geschrieben hatte.Ist schon kurios. Das konnte ich im ersten Step auch nicht ahnen.
    Durch das Replace klappt es aber jetzt und ich habe meinen String so wie ich ihn brauche.
    Danke noch mal

    Montag, 2. April 2012 17:32
  • Hallo Thomas, hast Du denn meinen letzten Tip ausprobiert ?

    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Montag, 2. April 2012 17:43