将int的stream转换为java中的char
这可能已经在其他地方回答了,但是如何获得int值的字符值呢?
具体来说,我正在读取一个TCPstream,读者.read()方法返回一个int。
我如何从中得到一个字符?
如果您要将stream转换为文本,则需要了解要使用的编码。 然后,您可以将字节数组传递给String
构造函数,并提供一个Charset
,或者将InputStreamReader
与恰当的Charset
一起使用。
如果你想要ISO-8859-1,直接从stream中读取字节,只需要从int
为char
即可。
编辑:如果你已经在使用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);
完成!