可能在其他地方已经回答了这个问题,但是如何获得int值的字符值呢?
具体来说,我正在从tcp流中读取a,而readers .read()方法返回一个int值。
我如何从中获取一个字符?
可能在其他地方已经回答了这个问题,但是如何获得int值的字符值呢?
具体来说,我正在从tcp流中读取a,而readers .read()方法返回一个int值。
我如何从中获取一个字符?
Answers:
如果您尝试将流转换为文本,则需要知道要使用哪种编码。然后,您可以将字节数组传递到String构造函数中并提供一个Charset,或者改为使用InputStreamReader适当的字节Charset。
如果要直接从流中读取字节,则仅当需要ISO-8859-1时,才简单地从from转换int为char。
编辑:如果您是已经使用了Reader,然后浇注的返回值read()来char是去(检查它是否是-1或不是之后),以正确的方式...但它通常更有效,更方便的调用read(char[], int, int)来读的一整块一次输入文字。但是不要忘记检查返回值,以查看已读取了多少个字符。
也许您要的是:
Character.toChars(65) // returns ['A']
更多信息: Character.toChars(int codePoint)
将指定的字符(Unicode代码点)转换为存储在char数组中的UTF-16表示形式。如果指定的代码点是BMP(基本多语言平面或平面0)值,则所得的char数组具有与codePoint相同的值。如果指定的代码点是辅助代码点,则所得的char数组具有相应的代理对。
toChars通常是不合适的。如果他正在从Reader阅读,那很好。
这取决于您将“将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;
有什么理由对您不起作用吗?
这里的大多数答案都提供了快捷方式,如果您不知道自己在做什么,可能会给您带来大麻烦。如果要使用快捷方式,则必须确切知道数据的编码方式。
每当Java在其文档中谈论字符时,它都会谈论16位字符。
您可以使用DataInputStream具有方便方法的。为了提高效率,请将其包装在中BufferedReader。
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
关键是每个函数readChar()实际上都将执行2 read并将其组合为一个16位字符。
US-ASCII保留8位以编码1个字符。ASCII表仅描述了128个可能的字符,因此始终未使用1位。
在这种情况下,您只需执行转换即可。
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8,Latin-1,ANSI和许多其他编码使用所有8位。前7位位于ASCII表之后,与US-ASCII编码相同。但是,第8位提供的字符在所有这些编码中都不同。因此,这里的事情变得很有趣。
如果您是牛仔,并且您认为第8位无关紧要(即您不关心“à,é,ç,è,ô...”之类的字符),那么可以通过简单的转换来摆脱困境。
但是,如果您想专业地执行此操作,则实际上应该在导入/导出文本(例如套接字,文件...)时始终指定一个字符集。
认真点吧 以上所有选项都是便宜的把戏。如果要编写灵活的软件,则需要支持可配置的字符集来导入/导出数据。这是一个通用的解决方案:
使用byte[]缓冲区读取数据,然后String 使用charset参数将其转换为。
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
您还可以使用InputStreamReader可以通过charset参数实例化的。
还有一条黄金法则:永远不要直接将一个字节转换为字符。那总是一个错误。
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);
做完了!
public int read(char[] cbuf)就能解决问题?