fixed char[x] in 8bit Ascii Codierung und dann in String umwandeln



  • Hallo, ich greife auf einen Shared Memory zu. Dieser wird von extern mit einem String (Ascii Charackter - 1byte pro Zeichen) beschrieben.

    Nun habe ich einen fixed charackter mit

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
            unsafe public struct DataExchangeEmailInTmp
            {            
                public fixed char server[255];
            }
    

    angelegt.
    Wie kann ich diesen von ANSI (sind 2 byte) auf ASCII umstellen und dann aber in C' einen String daraus machen?



  • Nimm nicht char sondern byte und benutz dann das entsprechende Encoding um den String zu bekommen.



  • Danke für den Tip, wie aber bekomm ich aus einen fixed char[] einen string?



  • fixed byte[] meintest du wohl und die Encoding Klasse hat eine GetString Methode.



  • auf der Gegenseite werden schon char (ascii) verwendet, also sollte das encoding nicht notwendig sein. Es sollte nur 1:1 in den string kopiert werden.

    Welche Klasse wäre hier notwendig?



  • ich habe ein byte bzw char(Ascii - Größe sind 8 bit) Array, das ich in ienen string wandeln will.
    Leider komme ich mit dem encoding nicht ganz zurecht.

    Wo liegt der Fehler beim Encoding?
    gruß Gerri

    char[] TmpArrayC = new char[255];
                byte[] TmpArrayB = new byte[255];
    
                for (int i = 0; i < TmpArrayC.Length; i++)
                {
                    TmpArrayC[i] = Convert.ToChar(dataExchangeReadTmp.server[i]); //Fixed array size
                    TmpArrayB[i] = dataExchangeReadTmp.server[i];
                }
    
                string server = Encoding.Unicode.GetString(TmpArrayB);
    


  • Lösung

    byte[] TmpArrayB = new byte[255];
    
                for (int i = 0; i < TmpArrayB.Length; i++)
                {                
                    TmpArrayB[i] = dataExchangeReadTmp.server[i];
                }
    
                string server = Encoding.UTF8.GetString(TmpArrayB, 0, 255);
    


  • Mach einfach wie gesagt dataExchangeReadTmp.server zu einem byte[] und benutz das gleich ohne vorher noch kopieren zu müssen. Außerdem solltest du nur bis zur ersten 0 lesen.


Log in to reply