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ß Gerrichar[] 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.