Chuyển đổi int sang char trong java


124

Dưới đây là một đoạn mã,

int a = 1;
char b = (char) a;
System.out.println(b);

Nhưng những gì tôi nhận được là đầu ra trống rỗng.

int a = '1';
char b = (char) a;
System.out.println(b);

Tôi sẽ lấy 1 làm đầu ra của mình.

Ai đó có thể giải thích điều này? Và nếu tôi muốn chuyển đổi một int thành một char như trong đoạn mã đầu tiên, tôi phải làm gì?


9
" Chuyển đổi một int thành một char? " Có thể b = (char)('0' + a)nhưng chỉ dành cho 0 <= a <= 9.
johnchen902

6
Giá trị thập phân 01 là ký tự không in được; nó hoạt động bình thường.
apraetor

Câu trả lời:


109
int a = 1;
char b = (char) a;
System.out.println(b);

sẽ in ra char có giá trị ascii 1 (char đầu tiêu đề, không thể in được).

int a = '1';
char b = (char) a;
System.out.println(b);

sẽ in ra char có giá trị ascii 49 (một tương ứng với '1')

Nếu bạn muốn chuyển đổi một chữ số (0-9), bạn có thể thêm 48 vào nó và ép kiểu, hoặc tương tự như vậy Character.forDigit(a, 10);.

Nếu bạn muốn chuyển đổi intgiá trị as trong ascii, bạn có thể sử dụng Character.toChars(48)ví dụ.


2
System.out.println('b'+3);làm thế nào tôi có thể nhận được b3thay thế 101bằng cách sử dụng println? bất kỳ cách nào khác thay thế printf?
Asif Mushtaq

2
@UnKnown Bạn cần đặt nó thành một chuỗi thay vì một ký tự như sau System.out.println ("b" + 3);
Haggra

Character.toCharshoạt động trên các điểm mã Unicode, không phải giá trị ASCII. Bạn sẽ nhận được điều tương tự (chỉ dành cho BMP) nếu bạn chỉ chuyển int thành char.
thinnespase

55

Câu trả lời của tôi tương tự như câu trả lời của jh314 nhưng tôi sẽ giải thích sâu hơn một chút.

Điều bạn nên làm trong trường hợp này là:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

Ở đây, chúng tôi đã sử dụng '0' vì các ký tự thực sự được biểu diễn bằng các giá trị ASCII. '0' là một ký tự và được biểu diễn bằng giá trị 48.

Chúng tôi đã nhập (a + '0')và để cộng các giá trị này, Java đã chuyển đổi '0' thành giá trị ASCII của nó là 48 và a là 1 để tổng là 49. Sau đó, những gì chúng tôi đã làm là:

(char)(49)

Chúng tôi di intchuyển đến char. ASCII tương đương với 49 là '1'. Bạn có thể chuyển đổi bất kỳ chữ số nào thành ký tự theo cách này, cách thông minh và tốt hơn là sử dụng .toString()phương pháp và sau đó trừ chữ số bằng .charAt()phương pháp.


42

Có vẻ như bạn đang tìm kiếm Character.forDigitphương pháp:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

Ngoài ra còn có một phương thức có thể chuyển đổi từ một char trở lại một int:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Lưu ý rằng bằng cách thay đổi, RADIXbạn cũng có thể hỗ trợ hệ thập lục phân (cơ số 16) và bất kỳ cơ số nào lên đến 36 (hoặc Character.MAX_RADIXnhư nó còn được gọi là).


@ProgrammingNub Xác định "giá trị của int". .Bạn có muốn nó in chữ số 4 không? Hay bạn muốn in giá trị Ascii của int, để 65in ra A? Bởi vì câu trả lời của tôi ở đây in hành vi mong đợi cho các yêu cầu của câu hỏi này. Xem Ideone.com/09LAFR
Simon Forsberg

10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, tôi cũng đã trải qua cùng một vấn đề nhưng những gì tôi đã làm là mã sau.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

Với điều này, bạn sẽ nhận được giá trị thập phân dưới dạng kiểu char. Tôi đã sử dụng charAt () với chỉ số 0 vì giá trị duy nhất trong Chuỗi đó là 'a' và như bạn biết, vị trí của 'a' trong Chuỗi đó bắt đầu từ 0.

Xin lỗi nếu tiếng anh của tôi không được giải thích tốt, hy vọng nó sẽ giúp bạn.


3
int a = 1;
char b = (char) (a + 48);

Trong ASCII, mỗi ký tự đều có số riêng. Và char '0' là 48 cho hệ thập phân, '1' là 49, v.v. Vì vậy nếu

char b = '2';
int a = b = 50;

1

Không ai trả lời "câu hỏi" thực sự ở đây: bạn đang chuyển đổi int thành char một cách chính xác; trong bảng ASCII giá trị thập phân 01 là "đầu tiêu đề", một ký tự không in được. Hãy thử tra cứu bảng ASCII và chuyển đổi một giá trị int từ 33 đến 7E; điều đó sẽ cung cấp cho bạn các ký tự để xem xét.


1

Bất cứ khi nào bạn nhập kiểu số nguyên thành char, nó sẽ trả về giá trị ascii của int đó (hãy xem qua bảng ascii để hiểu rõ hơn)

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
Loại .... charlà đơn vị mã UTF-16. 68 dưới dạng đơn vị mã UTF-16 là đơn vị mã duy nhất cần thiết để đại diện cho điểm mã Unicode U + 0044 . System.out sẽ thay đổi mã hóa văn bản thành mã hóa mặc định (có lẽ phù hợp với thiết bị đầu cuối / bảng điều khiển mà chương trình đang chạy). println nhận một ký tự và cố gắng mã hóa nó. Vì char là một codepoint hoàn chỉnh, nó có thể thử. Vì U + 0044 là một ký tự trong hầu hết tất cả các bộ ký tự, nên sẽ thành công trong việc đưa nó đến đầu cuối không được phân nhóm. Không liên quan gì đến ASCII.
Tom Blodget

0

Trong java, một char một int. Đoạn mã đầu tiên của bạn in ra ký tự tương ứng với giá trị của 1 trong lược đồ mã hóa ký tự mặc định (có thể là Unicode). Ký tự Unicode U + 0001 là một ký tự không in được, đó là lý do tại sao bạn không thấy bất kỳ đầu ra nào.

Nếu bạn muốn in ra ký tự '1', bạn có thể tra cứu giá trị của '1' trong lược đồ mã hóa bạn đang sử dụng. Trong Unicode, đây là 49 (giống ASCII). Nhưng điều này sẽ chỉ hoạt động đối với các chữ số 0-9.

Bạn có thể tốt hơn nên sử dụng một Chuỗi thay vì một ký tự và sử dụng toString()phương thức tích hợp sẵn của Java :

int a = 1;
String b = toString(a);
System.out.println(b);

Điều này sẽ hoạt động cho dù mã hóa hệ thống của bạn là gì và sẽ hoạt động đối với các số có nhiều chữ số.


1
Xin lỗi nhưng một char không phải là int, vì nó được tạo bằng một số byte khác nhau ( đại diện tham chiếu nhanh char-int - stackoverflow ). Một ký tự có thể được biểu diễn bằng một số, bạn nói đúng, nhưng nó không phải là một số nguyên.
morels

Ngoài ra, tôi nghĩ bạn có thể thấy dòng thứ hai nên đọc "String b = Integer.toString (a);"
Bị lỗi

Kiểu dữ liệu char được xác định rõ ràng trong java.lang.Character cũng như mối quan hệ của nó với các điểm mã int và unicode và các đơn vị mã.
Ian

0

nếu bạn muốn in các ký tự ascii dựa trên mã ascii của chúng và không muốn vượt quá số đó (như các ký tự unicode), bạn có thể xác định biến của mình dưới dạng byte, sau đó sử dụng chuyển đổi (char). I E:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

BTW, mã ascii cho chữ 'A' là 65


0

Đảm bảo giá trị số nguyên là giá trị ASCII của bảng chữ cái / ký tự.

Nếu không thì hãy làm cho nó.

for e.g. if int i=1

sau đó thêm 64 vào nó để nó trở thành 65 = giá trị ASCII của 'A' Sau đó sử dụng

char x = (char)i;

print x

// 'A' will be printed 

0

Nếu chúng ta đang nói về các loại lớp - không phải là nguyên thủy, bạn phải thực hiện thủ thuật sau:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

Không cần phải biến nó thành một Chuỗi trong quá trình này và bạn có số lượng paranthesis không khớp.
Simon Forsberg

Simon, "dấu ngoặc đơn". Tư vấn làm thế nào sau đó?
matua

-1

nhìn vào chương trình sau để biết khái niệm chuyển đổi hoàn chỉnh

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

hy vọng, nó sẽ giúp ít nhất một cái gì đó


-2

Nếu bạn muốn chuyển đổi một ký tự thành số nguyên tương ứng của nó, bạn có thể làm như sau:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

Điều này xảy ra vì trong ASCII có một số mục không thể in bình thường.

Ví dụ, các số từ 97 đến 122 là các số nguyên tương ứng với các chữ cái viết thường từ a đến z.


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
Vui lòng cung cấp một lời giải thích thay vì chỉ một kết xuất mã.
Jules Dupont

Mặc dù bài đăng chỉ có mã này có thể trả lời câu hỏi, vui lòng thêm giải thích tại sao nó làm như vậy. Điều này sẽ giúp người dùng trong tương lai đánh giá câu trả lời cho tình huống của họ.
Tom Brunberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.