【发布时间】:2017-10-21 01:47:08
【问题描述】:
我有一个十进制字符 unicode 值(大写 A 是 65)。
当值更高时,例如 120016 是数学 A,我必须根据它的十进制值来检索字符。
为此,我使用了
char c = (char)key;
我遇到了一个非常奇怪的行为:第一个十六进制数字被忽略。
这是来自 NetBeans 的屏幕截图。
这是我要打印的字符的unicode值
120016 转换成十六进制是 1D4D0。 但是,当它被上面的代码转换时,它被转换为 \uD4D0,如您所见,第一个 Hex 数字被忽略了。
我完全不知道为什么会这样。 这两个语句之间没有指令,键值仅作为参数给出,因此在转换为十六进制时无法更改。
【问题讨论】:
-
char 在 Java 中相当于一个 2 字节的 int。所以你永远不可能有一个十六进制值为 120016 的字符,因为它超出了范围
-
一个 int 是 32 位,可以容纳 8 个十六进制数字。一个 char 是 16 位的,只能保存 4 个十六进制数字。将 int 类型转换为 char 会默默地丢弃其余部分。
-
感谢您的快速回答。那我应该用什么?字符串不会将 unicode 值转换为 unicode 字符,因为您不能执行
String s = "\u" + code。那我该怎么办? -
'我有一个十进制字符 Unicode 值'和'第一个十六进制数字'是相互矛盾的。现实情况是你有一个二进制值,而不是十进制或十六进制数字。不清楚你在问什么。请勿在此处发布文字图片。完全浪费您的时间和我们的带宽。
-
谢谢你,你太客气了!