将int的stream转换为java中的char

这可能已经在其他地方回答了,但是如何获得int值的字符值呢?

具体来说,我正在读取一个TCPstream,读者.read()方法返回一个int。

我如何从中得到一个字符?

如果您要将stream转换为文本,则需要了解要使用的编码。 然后,您可以将字节数组传递给String构造函数,并提供一个Charset ,或者将InputStreamReader与恰当的Charset一起使用。

如果你想要ISO-8859-1,直接从stream中读取字节,只需要从intchar即可。

编辑:如果你已经在使用Reader ,那么将read()的返回值转换为char是正确的path(在检查它是否为-1之后)…但通常更高效和方便的调用read(char[], int, int)读取整个文本块。 不要忘记检查返回值,看看有多less个字符已经被读取。

也许你在问:

 Character.toChars(65) // returns ['A'] 

更多信息: Character.toChars(int codePoint)

将指定的字符(Unicode代码点)转换为存储在char数组中的UTF-16表示forms。 如果指定的代码点是BMP(Basic Multilingual Plane或Plane 0)值,则生成的char数组与codePoint具有相同的值。 如果指定的代码点是一个补充代码点,则生成的char数组具有相应的代理对。

这取决于你的意思是“将int转换为char”。

如果您只是想在int中进行转换,您可以使用Java的转换符表示法来转换它:

 int i = 97; // 97 is 'a' in ASCII char c = (char) i; // c is now 'a' 

如果你的意思是把整数1转换成字符'1',你可以这样做:

 if (i >= 0 && i <= 9) { char c = Character.forDigit(i, 10); .... } 

如果你想简单地将int 5转换为char'5':(仅用于整数0-9)

 int i = 5; char c = (char) ('0' + i); // c is now '5'; 

简单的铸造:

 int a = 99; char c = (char) a; 

有什么理由不适合你吗?

此解决scheme适用于整数长度大小= 1。

Integer input = 9; Character.valueOf((char) input.toString().charAt(0))

如果size> 1,我们需要使用for循环并迭代。

这里的大多数答案都提出了捷径,如果你不知道自己在做什么,它会给你带来很大的问题。 如果你想采取快捷方式,那么你必须确切知道你的数据是什么编码。

UTF-16

每当java在其文档中谈到字符,它就会谈到16位字符。

您可以使用DataInputStream ,它具有方便的方法。 为了提高效率,将其包装在BufferedReader

 // eg for sockets DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); char character = readChar(); // no need to cast 

事情是,每个readChar()将实际执行2次read并将它们结合到一个16位字符。

US-ASCII

US-ASCII保留8位来编码1个字符。 ASCII表只描述了128个可能的字符,所以1位总是未被使用。

在这种情况下,你可以简单地执行一个演员。

 int input = stream.read(); if (input < 0) throw new EOFException(); char character = (char) input; 

扩展的ASCII

UTF-8,Latin-1,ANSI和其他许多编码使用全部8位。 第一个7位跟在ASCII表中,与US-ASCII编码的相同。 但是,第8位提供了在所有这些编码中不同的字符。 所以,这里变得有趣。

如果你是一个牛仔,而你认为​​第八点并不重要(即你不关心像“à,é,ç,è,ô…”这样的angular色),那么你可以用一个简单的angular色逃脱。

但是,如果您想专业地完成这项工作,只要您input/输出文本(例如套接字,文件…),就应该始终指定一个字符集。

始终使用字符集

让我们认真的 以上所有选项都是廉价的技巧。 如果你想编写灵活的软件,你需要支持一个可configuration的字符集来导入/导出你的数据。 这是一个通用的解决scheme:

使用byte[]缓冲区读取数据,并使用字符集参数将其转换为String

 byte[] buffer = new byte[1024]; int nrOfBytes = stream.read(buffer); String result = new String(buffer, nrOfBytes, charset); 

你也可以使用一个可以用字符集参数实例化的InputStreamReader

还有一条金科玉律:不要直接向字符投一个字节。 这总是一个错误。

基于我假设用户只是想literaaly int转换为char答案,例如

 Input: int i = 5; Output: char c = '5' 

这已经在上面得到了回答,但是如果整数值i > 10 ,那么就需要使用char array

 char[] c = String.valueOf(i).toCharArray(); 
  int i = 7; char number = Integer.toString(i).charAt(0); System.out.println(number); 

这完全取决于传入数据的编码。

也许不是最快的一个:

 //for example there is an integer with the value of 5: int i = 5; //getting the char '5' out of it: char c = String.format("%s",i).charAt(0); 

将char转换为int或long的答案是简单的转换。

例如: – 如果您想将Char'0'转换为long。

按照简单的演员

 Char ch='0'; String convertedChar= Character.toString(ch); //Convert Char to String. Long finalLongValue=Long.parseLong(convertedChar); 

完成!