当前位置:  开发笔记 > 编程语言 > 正文

将char表示为Java中的一个字节

如何解决《将char表示为Java中的一个字节》经验,为你挑选了2个好方法。

我必须将char转换为字节或字节数组.在其他语言中,我知道char只是一个字节.但是,查看Java Character类,其最小值为\ u0000,其最大值为\ uFFFF.这使得它看起来像一个2字节长的字符.

我能将它存储为一个字节还是需要将其存储为两个字节?

在有人要求之前,我会说我正在尝试这样做,因为我在一个接口上工作,希望我的结果是一个字节数组.所以我必须将我的char转换成一个.

请让我知道并帮助我理解这一点.

谢谢,jbu



1> erickson..:

要将字符转换为字节,您需要指定字符编码.某些字符编码每个字符使用一个字节,而其他字符编码使用两个或更多字节.实际上,对于许多语言来说,用单个字节编码的字符太多了.

在Java中,从字符转换为字节的最简单方法是使用String类的getBytes(Charset)方法.(StandardCharsets该类定义了一些常见的编码.)但是,如果无法在指定的编码下映射该字符,则此方法将使用sile静默替换字符.如果需要更多控制,可以配置a CharsetEncoder以处理此情况并显示错误或使用其他替换字符.


不,如果您使用的是UTF-8,并且有任何非ASCII字符(`char`值> 127),则应使用编码API转换为字节.非ASCII字符需要UTF-8中的两个或更多字节.如果只是在128-255到字节范围内转换字符,则会解码错误的字符.

2> Varkhan..:

在Java中,char确实是16位(并且也是唯一的无符号类型!!).

如果您确定字符的编码是ASCII,那么您可以将它们转换为一个字节(因为ASCII仅使用字符的低7位).

如果您不需要修改字符或理解它们在String中的含义,您只需将字符存储在两个字节上,例如:

char[] c = ...;
byte[] b = new byte[c.length*2];
for(int i=0; i>8; 
    b[2*i+1] = (byte) (c[i]&0x00FF); 
}

(如果速度很重要,可以建议用右移替换2*).

但请注意,一些实际(显示)字符(或更准确地说,Unicode代码点)写在两个连续的字符上.因此,在两个字符之间切换并不能确保您在实际字符之间切换.

如果需要以字符串感知方式解码/编码或以其他方式操作char数组,则应该尝试使用java.io工具对char数组或String进行解码和编码,以确保正确的字符操作.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有