Unten ist ein Code-Snippet,
int a = 1;
char b = (char) a;
System.out.println(b);
Aber was ich bekomme, ist eine leere Ausgabe.
int a = '1';
char b = (char) a;
System.out.println(b);
Ich werde 1 als meine Ausgabe bekommen.
Kann jemand das erklären? Und was soll ich tun, wenn ich ein int wie im ersten Snippet in ein Zeichen konvertieren möchte?
b = (char)('0' + a)
aber nur für0 <= a <= 9
.Antworten:
druckt das Zeichen mit dem ASCII-Wert 1 aus (Zeichen am Anfang der Überschrift, das nicht gedruckt werden kann).
druckt das Zeichen mit dem ASCII-Wert 49 aus (einer entspricht '1')
Wenn Sie eine Ziffer (0-9) konvertieren möchten, können Sie 48 hinzufügen und umwandeln oder ähnliches
Character.forDigit(a, 10);
.Wenn Sie einen
int
as in ascii-Wert konvertieren möchten , können Sie diesenCharacter.toChars(48)
beispielsweise verwenden.quelle
System.out.println('b'+3);
Wie komme ichb3
stattdessen101
mit println zurecht? auf andere Weise statt printf?Character.toChars
arbeitet mit Unicode-Codepunkten, nicht mit ASCII-Werten. Sie erhalten dasselbe (nur für BMP), wenn Sie nur int in char umwandeln.Meine Antwort ähnelt der Antwort von jh314, aber ich werde es etwas genauer erklären.
Was Sie in diesem Fall tun sollten, ist:
Hier haben wir '0' verwendet, da Zeichen tatsächlich durch ASCII-Werte dargestellt werden. '0' ist ein Zeichen und wird durch den Wert 48 dargestellt.
Wir haben getippt
(a + '0')
und um diese zu addieren, hat Java '0' in seinen ASCII-Wert konvertiert, der 48 und a 1 ist, also ist die Summe 49. Dann haben wir Folgendes getan:Wir gegossen
int
zuchar
. Das ASCII-Äquivalent von 49 ist '1'. Sie können jede Ziffer auf diese Weise in Zeichen konvertieren. Dies ist intelligenter und besser als die Verwendung einer.toString()
Methode und das anschließende Subtrahieren der Ziffer nach.charAt()
Methode.quelle
Anscheinend suchen Sie nach der
Character.forDigit
Methode:Es gibt auch eine Methode, die von einem Zeichen zurück in ein int konvertieren kann:
Beachten Sie, dass Sie durch Ändern von
RADIX
auch hexadezimal (Radix 16) und alle Radixe bis zu 36 (oderCharacter.MAX_RADIX
auch bekannt als) unterstützen können.quelle
65
gedruckt wirdA
? Weil meine Antwort hier das erwartete Verhalten für die Anforderungen dieser Frage druckt. Siehe ideone.com/09LAFRhola, nun, ich habe das gleiche Problem durchgemacht, aber was ich getan habe, war der folgende Code.
Damit erhalten Sie den Dezimalwert als Zeichentyp. Ich habe charAt () mit Index 0 verwendet, weil der einzige Wert in diesem String 'a' ist und wie Sie wissen, die Position von 'a' in diesem String bei 0 beginnt.
Entschuldigung, wenn mein Englisch nicht gut erklärt ist, hoffe es hilft dir.
quelle
In ASCII hat jedes Zeichen eine eigene Nummer. Und char '0' ist 48 für Dezimalzahl, '1' ist 49 und so weiter. Also wenn
quelle
Niemand hat hier die eigentliche "Frage" beantwortet: Sie konvertieren int korrekt in char; In der ASCII-Tabelle ist ein Dezimalwert von 01 "Beginn der Überschrift", ein nicht druckbares Zeichen. Versuchen Sie, eine ASCII-Tabelle nachzuschlagen und einen int-Wert zwischen 33 und 7E zu konvertieren. das gibt dir Charaktere zum Anschauen.
quelle
quelle
char
ist eine UTF-16-Codeeinheit. 68 als UTF-16-Codeeinheit ist die einzige Codeeinheit, die zur Darstellung des Unicode-Codepunkts U + 0044 benötigt wird . System.out ändert die Codierung von Text in die Standardcodierung (vermutlich passend zu dem Terminal / der Konsole, in dem das Programm ausgeführt wird). println nimmt ein Zeichen und versucht es zu codieren. Da das Zeichen ein vollständiger Codepunkt ist, kann es versuchen. Da U + 0044 ein Zeichen in fast allen Zeichensätzen ist, sollte es erfolgreich sein, es ungehindert zum Terminal zu bringen. Nichts mit ASCII zu tun.In Java ein Zeichen ist ein int. Ihr erstes Snippet druckt das Zeichen aus, das dem Wert 1 im Standard-Zeichenkodierungsschema (wahrscheinlich Unicode) entspricht. Das Unicode-Zeichen U + 0001 ist ein nicht druckbares Zeichen, weshalb Sie keine Ausgabe sehen.
Wenn Sie das Zeichen '1' ausdrucken möchten, können Sie den Wert von '1' in dem von Ihnen verwendeten Codierungsschema nachschlagen. In Unicode ist dies 49 (das gleiche wie in ASCII). Dies funktioniert jedoch nur für die Ziffern 0-9.
Möglicherweise ist es besser, einen String als ein Zeichen und die in Java integrierte
toString()
Methode zu verwenden:Dies funktioniert unabhängig von Ihrer Systemcodierung und für mehrstellige Zahlen.
quelle
Wenn Sie ASCII-Zeichen basierend auf ihrem ASCII-Code drucken möchten und nicht darüber hinausgehen möchten (wie Unicode-Zeichen), können Sie Ihre Variable als Byte definieren und dann die Konvertierung (char) verwenden. dh:
Übrigens ist der ASCII-Code für den Buchstaben 'A' 65
quelle
Stellen Sie sicher, dass der ganzzahlige Wert der ASCII-Wert eines Alphabets / Zeichens ist.
Wenn nicht, dann mach es.
Fügen Sie dann 64 hinzu, sodass der Wert 65 = ASCII von 'A' wird. Verwenden Sie dann
quelle
Wenn es sich um Klassentypen handelt - nicht um Grundelemente - muss der folgende Trick ausgeführt werden:
quelle
hoffe, es wird zumindest etwas helfen
quelle
Wenn Sie ein Zeichen in die entsprechende Ganzzahl konvertieren möchten, können Sie Folgendes tun:
Dies liegt daran, dass es in ASCII einige Elemente gibt, die nicht normal gedruckt werden können.
Beispielsweise sind die Zahlen 97 bis 122 ganze Zahlen, die den Kleinbuchstaben a bis z entsprechen.
quelle
quelle