Di bawah ini adalah potongan kode,
int a = 1;
char b = (char) a;
System.out.println(b);
Tapi yang saya dapatkan adalah keluaran kosong.
int a = '1';
char b = (char) a;
System.out.println(b);
Saya akan mendapatkan 1 sebagai output saya.
Adakah yang bisa menjelaskan ini? Dan jika saya ingin mengubah int menjadi char seperti pada cuplikan pertama, apa yang harus saya lakukan?
b = (char)('0' + a)
tetapi hanya untuk0 <= a <= 9
.Jawaban:
akan mencetak karakter dengan nilai ascii 1 (karakter start-of-heading, yang tidak dapat dicetak).
akan mencetak karakter dengan nilai ascii 49 (yang sesuai dengan '1')
Jika Anda ingin mengonversi digit (0-9), Anda dapat menambahkan 48 ke digit tersebut dan mentransmisikan, atau semacamnya
Character.forDigit(a, 10);
.Jika Anda ingin mengonversi
int
sebagai nilai ascii, Anda dapat menggunakanCharacter.toChars(48)
misalnya.sumber
System.out.println('b'+3);
bagaimana saya bisa mendapatkanb3
alih101
- alih menggunakan println? ada cara lain selain printf?Character.toChars
beroperasi pada poin kode Unicode, bukan nilai ASCII. Anda mendapatkan yang sama (hanya untuk BMP) jika Anda hanya memasukkan int ke char.Jawaban saya mirip dengan jawaban jh314 tetapi saya akan menjelaskan sedikit lebih dalam.
Apa yang harus Anda lakukan dalam kasus ini adalah:
Di sini, kami menggunakan '0' karena karakter sebenarnya diwakili oleh nilai ASCII. '0' adalah karakter dan diwakili oleh nilai 48.
Kami mengetik
(a + '0')
dan untuk menjumlahkannya, Java mengubah '0' menjadi nilai ASCII-nya yaitu 48 dan a adalah 1 sehingga jumlahnya adalah 49. Lalu yang kami lakukan adalah:Kami dicor
int
kechar
. ASCII yang setara dengan 49 adalah '1'. Anda dapat mengonversi digit apapun menjadi char dengan cara ini dan lebih cerdas dan lebih baik daripada menggunakan.toString()
metode dan kemudian mengurangkan digit dengan.charAt()
metode.sumber
Sepertinya Anda sedang mencari
Character.forDigit
metode:Ada juga metode yang dapat mengubah dari char kembali menjadi int:
Perhatikan bahwa dengan mengubah
RADIX
Anda juga dapat mendukung heksadesimal (radix 16) dan radix apapun hingga 36 (atauCharacter.MAX_RADIX
yang juga dikenal sebagai).sumber
65
mencetakA
? Karena jawaban saya di sini mencetak perilaku yang diharapkan untuk persyaratan pertanyaan ini. Lihat ideone.com/09LAFRhola, baik saya mengalami masalah yang sama tetapi yang saya lakukan adalah kode berikut.
Dengan ini Anda mendapatkan nilai desimal sebagai tipe karakter. Saya menggunakan charAt () dengan indeks 0 karena satu-satunya nilai ke dalam String itu adalah 'a' dan seperti yang Anda ketahui, posisi 'a' ke dalam String itu dimulai dari 0.
Maaf jika bahasa Inggris saya tidak dijelaskan dengan baik, semoga dapat membantu Anda.
sumber
Di ASCII, setiap karakter memiliki nomornya sendiri. Dan karakter '0' adalah 48 untuk desimal, '1' adalah 49, dan seterusnya. Jadi jika
sumber
Tidak ada yang menjawab "pertanyaan" sebenarnya di sini: Anda ARE mengonversi int ke char dengan benar; dalam tabel ASCII nilai desimal 01 adalah "start of heading", karakter non-cetak. Coba cari tabel ASCII dan ubah nilai int antara 33 dan 7E; yang akan memberi Anda karakter untuk dilihat.
sumber
sumber
char
adalah unit kode UTF-16. 68 sebagai unit kode UTF-16 adalah satu-satunya unit kode yang diperlukan untuk mewakili titik kode Unicode U + 0044 . System.out akan mengubah pengkodean teks menjadi pengkodean default (mungkin cocok dengan terminal / konsol tempat program berjalan). println mengambil karakter dan mencoba menyandikannya. Karena char adalah titik kode yang lengkap, itu dapat dicoba. Karena U + 0044 adalah karakter di hampir semua himpunan karakter, seharusnya ada keberhasilan dalam memasukkannya ke terminal tanpa karakter. Tidak ada hubungannya dengan ASCII.Di java a char adalah int. Cuplikan pertama Anda mencetak karakter yang sesuai dengan nilai 1 dalam skema pengkodean karakter default (yang mungkin Unicode). Karakter Unicode U + 0001 adalah karakter non-cetak, itulah sebabnya Anda tidak melihat keluaran apa pun.
Jika Anda ingin mencetak karakter '1', Anda dapat mencari nilai '1' dalam skema pengkodean yang Anda gunakan. Di Unicode nilainya 49 (sama dengan ASCII). Tetapi ini hanya akan berfungsi untuk angka 0-9.
Anda mungkin lebih baik menggunakan String daripada char, dan menggunakan
toString()
metode bawaan Java :Ini akan berfungsi apa pun pengkodean sistem Anda, dan akan berfungsi untuk angka multi-digit.
sumber
jika Anda ingin mencetak karakter ascii berdasarkan kode ascii mereka dan tidak ingin melampaui itu (seperti karakter unicode), Anda dapat mendefinisikan variabel Anda sebagai byte, dan kemudian menggunakan konversi (char). yaitu:
BTW, kode ascii untuk huruf 'A' adalah 65
sumber
Pastikan nilai integer adalah nilai ASCII dari alfabet / karakter.
Jika tidak maka buatlah.
lalu tambahkan 64 sehingga menjadi 65 = nilai ASCII dari 'A' Lalu gunakan
sumber
Jika kita berbicara tentang tipe kelas - bukan primitif, trik berikut harus dilakukan:
sumber
berharap, ini akan membantu setidaknya sesuatu
sumber
Jika Anda ingin mengonversi karakter menjadi bilangan bulat yang sesuai, Anda dapat melakukan sesuatu seperti ini:
Hal ini terjadi karena di ASCII terdapat beberapa item yang tidak dapat dicetak secara normal.
Misalnya, angka 97 sampai 122 adalah bilangan bulat yang sesuai dengan huruf kecil a sampai z.
sumber
sumber