在Java中将int转换为char


124

下面是一个代码片段,

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

但是我得到的是空输出。

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

我将得到1作为输出。

有人可以解释吗?如果要像第一个代码片段一样将int转换为char,我应该怎么办?


9
将int转换为char? ”也许(b = (char)('0' + a)但仅适用于)0 <= a <= 9
johnchen902

6
十进制值01是非打印字符;它工作正常。
apraetor

Answers:


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

会打印出ascii值为1的字符(首字符,这是不可打印的)。

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

将以ascii值49输出一个字符(一个对应于'1')

如果要转换数字(0-9),则可以将数字加48并进行转换,例如Character.forDigit(a, 10);

如果要转换intas ascii值,则可以使用Character.toChars(48)例如。


2
System.out.println('b'+3);我怎么能b3代替101使用println?还有其他方法代替printf吗?
Asif Mushtaq,

2
@UnKnown您需要使它成为字符串而不是char,如下所示:System.out.println(“ b” + 3);
哈格格拉

Character.toChars对Unicode代码点而不是ASCII值进行操作。如果仅将int转换为char,则得到相同的结果(仅适用于BMP)。
弱碱性磷酸酶

55

我的答案与jh314的答案相似,但我会更深入地说明。

在这种情况下,您应该做的是:

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

在这里,我们使用“ 0”,因为字符实际上是由ASCII值表示的。“ 0”是一个字符,由值48表示。

我们进行了键入,(a + '0')然后将它们相加,Java将“ 0”转换为它的ASCII值48,a等于1,所以总和为49。然后我们做的是:

(char)(49)

我们铸造intchar。ASCII等效的49为'1'。您可以通过这种方式将任何数字转换为char,并且比使用.toString()method 更聪明,更好的方法,然后通过.charAt()method 减去数字。


42

似乎您正在寻找Character.forDigit方法:

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

还有一种可以从char转换回int的方法:

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

请注意,通过更改 RADIX您还可以支持十六进制(基数16)以及不超过36(或Character.MAX_RADIX也称为36)的任何基数。


@ProgrammingNub定义“ int的值”。您不希望它打印数字4吗?还是要打印int的Ascii值,以便进行65打印A?因为我的答案在此打印了此问题要求的预期行为。参见ideone.com/09LAFR
西蒙·

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

呵呵,好吧,我遇到了同样的问题,但是我所做的是下面的代码。

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

这样,您就可以将十进制值作为char类型。我将charAt()与索引0一起使用是因为该字符串中的唯一值是'a',并且您知道,'a'在该字符串中的位置从0开始。

抱歉,如果我的英语讲得不好,希望对您有所帮助。


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

在ASCII中,每个字符都有自己的编号。char'0'是十进制的48,'1'是49,依此类推。因此,如果

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

1

这里没有人回答真正的“问题”:您将int正确转换为char;在ASCII表中,十进制值为01是“开始标题”,即非打印字符。尝试查找ASCII表并在33到7E之间转换一个int值;这会给你角色看。


1

每当您将强制转换类型键入char时,它将返回该int的ascii值(一旦经过ascii表以更好地理解)

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

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

    //output- D

2
排序... char是UTF-16代码单元。作为UTF-16代码单元的68是表示Unicode代码点U + 0044所需的唯一代码单元。System.out会将文本的编码更改为默认编码(大概与程序在其中运行的终端/控制台匹配)。println需要一个char并尝试对其进行编码。由于char是完整的代码点,因此可以尝试。由于U + 0044几乎是所有字符集中的一个字符,因此应该成功地将其不显示乱码。与ASCII无关。
汤姆·布洛杰特

0

在java中,char 一个int。您的第一个代码段将打印出与默认字符编码方案(可能是Unicode)中的值1相对应的字符。Unicode字符U + 0001是非打印字符,这就是为什么看不到任何输出的原因。

如果要打印出字符“ 1”,则可以在使用的编码方案中查找值“ 1”。在Unicode中为49(与ASCII相同)。但这仅适用于数字0-9。

使用String而不是char并使用Java的内置toString()方法可能会更好:

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

无论您的系统编码是什么,它都可以工作,并且适用于多位数字。


1
抱歉,char不是int,因为它由不同数量的字节组成(快速引用char-int表示形式-stackoverflow)。字符可以用数字表示,是的,但是它不是整数。
2015年

另外,我认为您可能会发现第二行应显示为“ String b = Integer.toString(a);”。
错误的2016年

char数据类型在java.lang.Character中已得到很好的定义,以及它与int和unicode代码点以及代码单元的关系。
伊恩(Ian)

0

如果要基于ASCII代码打印ASCII字符并且不想超出该范围(例如Unicode字符),则可以将变量定义为字节,然后使用(char)转换。即:

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

顺便说一句,字母“ A”的ASCII码是65


0

确保整数值为字母/字符的ASCII值。

如果没有,那就去做。

for e.g. if int i=1

然后添加64,使其变为65 = ASCII值“ A”,然后使用

char x = (char)i;

print x

// 'A' will be printed 

0

如果我们在谈论类类型而不是原始类型,则必须完成以下技巧:

Integer someInt;
Character someChar;

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

在此过程中,无需将其设置为String,并且您的括号数量不匹配。
西蒙·佛斯伯格

西蒙,“括号”。请教如何?
马图阿

-1

查看以下程序以获取完整的转换概念

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");
    }
}

希望,它至少会有所帮助


-2

如果要将字符转换为相应的整数,可以执行以下操作:

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

发生这种情况是因为在ASCII中有些项目无法正常打印。

例如,数字97至122是对应于小写字母a至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
请提供说明,而不只是提供代码转储。
朱尔斯·杜邦

尽管此仅代码发布的帖子可能会回答该问题,但请添加解释其原因的说明。这将有助于将来的用户评估其情况的答案。
汤姆·布伦伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.