2016-01-31 2 views
6

Da ich ein Anfänger in der Computerprogrammierung bin, bekam ich Hausaufgaben, bei denen ich die Kartensymbole benutzte. Im Zuge meiner Recherchen stieß ich auf eine einfache Möglichkeit, die Symbole abzurufen:Woher bezieht (char) int seine Symbole?

Console.Write((char)6); 

gibt Ihnen

Console.Write((char)3); 

gibt Ihnen

und so weiter ♥

♠ ...

Allerdings verstehe ich immer noch nicht, was Logik C# verwendet, um diese Symbole abzurufen. Ich meine, das ♠ Symbol in der Unicode Tabelle ist U + 2660, aber ich habe es nicht benutzt. Die ASCII-Tabelle enthält nicht einmal diese Symbole.

Also meine Frage ist, was ist die Logik hinter (char)int?

Antwort

8

Für diese niedrigen Zahlen (unter 32) ist dies ein Aspekt der Konsole und nicht C#, und es kommt von Code page 437 - obwohl es diejenigen nicht enthält, die andere Bedeutungen haben, die die Konsole tatsächlich verwendet, wie Registerkarte, Wagenrücklauf und Glocke. Dies ist in keinem Kontext übertragbar, in dem Sie nicht direkt in einem Konsolenfenster ausgeführt werden, und Sie sollten z. 0x2660 statt, oder nur '\u2660'.

1

Die Logik hinter (char)int ist, dass char eine UTF-16-Code-Einheit ist, von der eine oder zwei einen Unicode Codepunkt codieren. Codepunkte sind natürlich Ordnungszahlen, die eine Kennung für ein Mitglied eines Zeichensatzes sind. Sie werden oft in hexadezimaler Schreibweise und speziell für Unicode mit vorangestelltem U + geschrieben, zum Beispiel U+2660.

UTF-16 ist eine Zuordnung zwischen Codepunkt und Code-Einheiten. Code-Einheiten mit 16 Bit können als Ganzzahlen bearbeitet werden. Da eine char eine Codeeinheit enthält, können Sie eine short in eine char konvertieren. Da die verschiedenen Integertypen zusammenarbeiten können, können Sie eine int in eine char konvertieren.

So hat Ihre Kurzform (oder int) nur dann eine Bedeutung als Text, wenn sie eine UTF-16-Codeeinheit für einen Codepunkt darstellt, der nur eine Codeeinheit hat. (Sie können auch ein int, die eine ganze codepoint to a string konvertieren.)

Natürlich können Sie es den Compiler Figur lassen könnte für Sie aus und machen es einfacher für Ihre Leser auch mit: Console.Write (‚♥‘);

Vergessen Sie auch ASCII. Es ist nie die richtige Codierung (außer wenn es ist). Wenn es nicht klar ist, ist eine Zeichenfolge eine gezählte Sequenz von UTF-16-Code-Einheiten.