new String() Java2C#

    • new String() Java2C#

      new String() Java2C#
      Guten Abend,

      ich bin gerade dabei die erste Methode vom Knuddels-Applet aus Java in C# zu übersetzen.
      Ganz schön verzwickte Sache, alleine um das erste bytearray in dieser Methode zu berechnen muss ich 3 Methoden und 1 komplette Klasse übersetzen :rolleyes:

      Dementsprechend ist natürlich Sorgfalt angesagt, wenn irgendwo auch nur eine Kleinigkeit fehlt funktioniert es nachher nicht, und dementsprechend lustig ist natürlich dann nachher die Fehlersuche in diesem umfangreichen Code.

      Daher frage ich lieber einmal zuviel als zuwenig, da ich sowieso nicht so der Java-Guru bin.

      Ein Auszug aus der einer:

      Quellcode

      1. static byte[] a;
      2. static String[] b = new String[256];
      3. static int[] c = new int[256];
      4. public static final synchronized String a(int paramInt)
      5. {
      6. int i = paramInt & 0xFF;
      7. if (c[i] == paramInt)
      8. while (true)
      9. {
      10. return b[i];
      11. label24: String str = new String(a, 0, paramInt, a[(paramInt - 1)] & 0xFF).intern();
      12. b[i] = str;
      13. }
      14. while (true)
      15. {
      16. paramInt &= 65535;
      17. break label24:
      18. c[i] = paramInt;
      19. if (paramInt >= 0);
      20. }
      21. }
      Alles anzeigen


      Mir geht es speziell um die Zeile

      Quellcode

      1. label24: String str = new String(a, 0, paramInt, a[(paramInt - 1)] & 0xFF).intern();


      Das Label brauch ich nicht, also kann ich das ja schonmal weglassen. Nur die Frage ist nun: Wie wird der rest des Strings korrekt in C# übersetzt? Den in Java vorhandenen letzten Parameter gibt es in C# genausowenig wie die Methode Intern().

      Mir scheint es dass die Länge des Strings in Java mit new String() nochmals seperat angegeben wird.

      Mein Übersetzungsvorschlag wäre daher

      Quellcode

      1. string str = (a[(parameter - 1)] & 0xFF).ToString();


      Ist das richtig, oder sind die anderen Parameter zwingend damit nachher das Resultat stimmt?
      new string() gibt es in C# schließlich auch, nur mit etwas anderen Parametern.
    • new String() Java2C#

      public String intern() Returns a canonical representation for the string object.
      die .intern-Methode wird benutzt weil Java komplexe Datentypen nicht kopiert sondern referenziert(zb. um Methoden über die Referenz aufzurufen). Ich kann kein C#, aber ich kann mir vorstellen das .clone(), .copy(), getCanonical() oder was in der Art da vorhanden ist.

      Zum benutztem Konstruktor verschliesst sich mir die Sinnfrage(Warum nimmt der keinen StringBuilder?), aber du kannst ihn zumindest Nachbauen:

      Quellcode

      1. [url=http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29]String[/url](byte[] bytes, int offset, int length, [url=http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html]String[/url] charsetName)
      Constructs a new String by decoding the specified subarray of bytes using the specified charset.
      Nen bytearray nach charset konvertieren kann C# sicher auch, auch wenns nicht in der String-Klasse stecken sollte.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von radical ()