在java中将int转换为char
Posted
技术标签:
【中文标题】在java中将int转换为char【英文标题】:Convert int to char in java 【发布时间】:2013-08-01 20:09:40 【问题描述】:下面是代码sn-p,
int a = 1;
char b = (char) a;
System.out.println(b);
但我得到的是空输出。
int a = '1';
char b = (char) a;
System.out.println(b);
我会得到 1 作为我的输出。
有人可以解释一下吗?如果我想像第一个 sn-p 一样将 int 转换为 char,我该怎么办?
【问题讨论】:
"将 int 转换为 char?" 可能是b = (char)('0' + a)
,但仅适用于 0 <= a <= 9
。
十进制值01为非打印字符;它工作正常。
【参考方案1】:
int a = 1;
char b = (char) a;
System.out.println(b);
将打印出带有Unicode code point 1 的字符(开头的字符,不可打印;请参阅此表:C0 Controls and Basic Latin,与 ASCII 相同)
int a = '1';
char b = (char) a;
System.out.println(b);
将打印出带有 Unicode 代码点 49 的字符(对应于 '1')
如果你想转换一个数字 (0-9),你可以给它加上 48 并强制转换,或者类似Character.forDigit(a, 10);
。
如果您想将 int
转换为 Unicode 代码点,您可以使用 Character.toChars(48)
例如。
【讨论】:
System.out.println('b'+3);
如何使用 println 获得 b3
而不是 101
?任何其他方式代替 printf?
@UnKnown 您需要将其设为字符串而不是字符,如下所示 System.out.println("b" + 3);
Character.toChars
在 Unicode 代码点上运行,而不是 ASCII 值。如果您只是将 int 转换为 char,则会得到相同的结果(仅适用于 BMP)。【参考方案2】:
我的回答与 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)
我们将int
转换为char
。 ASCII 等价于 49 是“1”。您可以通过这种方式将任何数字转换为字符,并且比使用.toString()
方法然后通过.charAt()
方法减去数字更智能和更好。
【讨论】:
【参考方案3】:您似乎正在寻找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
,也称为)。
【讨论】:
@ProgrammingNub 定义“int 的值”。 .你不想打印数字 4 吗?或者您想打印 int 的 Ascii 值,以便65
打印 A
?因为我在这里的回答打印了这个问题要求的预期行为。见ideone.com/09LAFR【参考方案4】:
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 类型的十进制值。我使用索引为 0 的 charAt(),因为该字符串中的唯一值是“a”,而且如您所知,“a”在该字符串中的位置从 0 开始。
对不起,如果我的英语解释得不好,希望对你有所帮助。
【讨论】:
【参考方案5】:您可能希望将其打印为“1”或“a”。
如果您想输入“1”,那么:
int a = 1;
char b = (char)(a + '0');
System.out.println(b);
如果你想要'a'作为输入,那么:
int a = 1;
char b = (char)(a-1 + 'a');
System.out.println(b);
java 将 ascii 值转换为 char :)
【讨论】:
【参考方案6】:int a = 1;
char b = (char) (a + 48);
在 ASCII 中,每个字符都有自己的编号。 char '0' 是十进制的 48,'1' 是 49,依此类推。所以如果
char b = '2';
int a = b = 50;
【讨论】:
【参考方案7】:这里没有人回答真正的“问题”:您正在正确地将 int 转换为 char;在 ASCII 表中,十进制值 01 是“标题开头”,一个非打印字符。尝试查找一个 ASCII 表并在 33 和 7E 之间转换一个 int 值;这会让你看到角色。
【讨论】:
【参考方案8】:每当您将整数转换为 char 时,它都会返回该 int 的 ascii 值(通过 ascii 表以便更好地理解)
int a=68;
char b=(char)a;
System.out.println(b);//it will return ascii value of 68
//output- D
【讨论】:
Sort of....char
是一个 UTF-16 代码单元。 68 作为 UTF-16 代码单元是表示 Unicode 代码点 U+0044 所需的唯一代码单元。 System.out 会将文本的编码更改为默认编码(可能与运行程序的终端/控制台匹配)。 println 接受一个字符并尝试对其进行编码。由于char是一个完整的codepoint,可以试试。由于 U+0044 是几乎所有字符集中的一个字符,因此应该可以成功地将其以无乱码的形式传送到终端。与 ASCII 无关。【参考方案9】:
如果我们谈论的是类类型 - 而不是原语,则必须完成以下技巧:
Integer someInt;
Character someChar;
someChar = (char)Integer.parseInt(String.valueOf(someInt));
【讨论】:
在这个过程中不需要把它变成一个字符串,并且你的括号数不匹配。 西蒙,“括号”。建议怎么做?【参考方案10】:在java中一个char 是一个int。您的第一个 sn-p 在默认字符编码方案(可能是 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);
无论您的系统编码是什么,这都适用,并且适用于多位数字。
【讨论】:
抱歉,char 不是 int,因为它由不同数量的字节组成(快速参考。char-int representation - ***)。 char 可以用数字来表示,你是对的,但它不是整数。 另外,我想你可能会发现第二行应该是“String b = Integer.toString(a);” char 数据类型在java.lang.Character 以及它与 int 和 unicode 代码点和代码单元的关系中得到了很好的定义。【参考方案11】:如果您想根据 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
【讨论】:
【参考方案12】:确保整数值是字母/字符的 ASCII 值。
如果没有,那就做吧。
for e.g. if int i=1
然后添加 64 使其变为 65 = 'A' 的 ASCII 值 然后使用
char x = (char)i;
print x
// 'A' will be printed
【讨论】:
【参考方案13】:有一种方法可以将int
转换为char
,即使不使用ASCII 值。
例子:
int i = 2;
char ch = Integer.toString(i).charAt(0);
System.out.println(ch);
解释:
首先将整数转换为字符串,然后使用字符串函数charAt()
,从字符串中提取字符。由于整数只有一个数字,索引0
被赋予charAt()
函数。
【讨论】:
【参考方案14】:首先,将int
(或其他类型)转换为String
,
int a = 1;
String value = String.valueOf(a);
然后,将 String
转换为 char
。
char newValue = value.charAt(0);
这样可以避免空输出...
System.out.println(newValue);
【讨论】:
【参考方案15】:查看以下程序了解完整的转换概念
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");
希望,它至少会有所帮助
【讨论】:
【参考方案16】:如果你想将一个字符转换成它对应的整数,你可以这样做:
int a = (int) 'a';
char b = (char) a;
System.out.println(b);
这是因为在 ASCII 中有些项目不能正常打印。
例如,数字 97 到 122 是对应于小写字母 a 到 z 的整数。
【讨论】:
【参考方案17】: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);
【讨论】:
请提供解释,而不仅仅是代码转储。 虽然这篇仅包含代码的帖子可能会回答这个问题,但请添加解释原因。这将帮助未来的用户根据他们的情况评估答案。以上是关于在java中将int转换为char的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“ord”函数在 Haskell 中将 Char 转换为 Int?
无法在赋值c ++中将char *转换为int * [关闭]