Java char包含值> 255?

Mat*_*oli 2 java char

我从套接字中获取了一个char数组:

char[] cbuf = new char[3];
inputStream.read(cbuf, 0, 3); // read 3 chars in buffer "cbuf", offset = 0
Run Code Online (Sandbox Code Playgroud)

然后当我打印出来时:

System.out.println("r:"+(int)cbuf[0]+" g:"+(int)cbuf[1]+" b:"+(int)cbuf[2]);
Run Code Online (Sandbox Code Playgroud)

我在某个方面得到了:

...
r:82 g:232 b:250
r:82 g:232 b:250
r:66 g:233 b:8224
Run Code Online (Sandbox Code Playgroud)

8224值比方式更255,如何能一个字符包含这个值???

谢谢

Mic*_*tta 8

charJava中的原语是16位宽,用于容纳标准ASCII范围之外的字符,使用Unicode.

看起来你正试图将RGB值存储在一个char[3].我可以建议一个byte[3],或java.awt.Color

Color c = new Color(255, 255, 240);
Run Code Online (Sandbox Code Playgroud)

  • @Michael Petrotta:不,你的意思是UTF-16.确实,Java也使用修改过的UTF-8,但不是char类型:它根本不能,因为对于任何字符> = U + 0800,这需要超过16位.Java 1.4及更早版本使用UCS-2,Java 1.5切换为UTF-16. (2认同)
  • int red = 0xFF&bytebuf [0]; (2认同)

Adr*_*onk 7

InputStreamread(char[], int, int)上没有方法.您必须在Reader子类(例如InputStreamReader)上调用它. InputStreamReader使用平台默认字符编码自动将字节转换为字符,在您的情况下,它看起来像是windows-1252.

你收到的角色,8224是Unicode字符U + 2020 Dagger'†'.这可能是使用windows-1252字符编码从字节0x86(134)转换而来的.

如果您正在读取包含非文本内容的文件,则需要确保不使用Reader的子类读取它,而是使用InputStream的子类.或者,您可以使用InputStreamReader并指定像ISO-8859-1这样的字符编码,它将每个字节映射到具有相同数值的char.


lin*_*r27 5

charJava中类型是16位.

如果您正在寻找8位数据类型,请考虑使用byte.