1

如何在处理中将 char 数据类型转换为其 utf-8 int 表示形式?

所以如果我有一个数组 ['a', 'b', 'c'] 我想获得另一个数组 [61, 62, 63]。

4

2 回答 2

2

在我的回答之后,我想出了一种更简单、更直接的方法来转换为你想要的数字类型。你想要的 'a' 是 61 而不是 97 等等。看到 61 是十进制 97 的十六进制表示并不难。所以你需要做的就是将你的 char 输入到一个特定的方法中,如下所示:

Integer.toHexString((int)'a');

如果你有一个这样的字符数组:

char[] c = {'a', 'b', 'c', 'd'};

然后你可以这样使用上面的:

Integer.toHexString((int)c[0]);

等等等等。

编辑

根据下面评论中的 vk 示例,您可以在处理中执行以下操作:

char c = 'a';

以上将为您提供字符的十六进制表示为字符串。

// to save the hex representation as an int you need to parse it since hex() returns a String
int hexNum = PApplet.parseInt(hex(c));

// OR

int hexNum = int(c);

为了 OP 和下面的评论者的利益。即使您在答案中使用了我之前的建议,您也会得到 97 的“a”,因为 97 是十六进制 61 的十进制表示。看到 UTF-8 与前 127 个 ASCII 条目的值匹配,我不明白为什么无论如何,人们会期待任何不同的东西。至于 UnsupportedEncodingException,一个简单的解决方法是将语句包装在 try/catch 块中。但是,没有必要看到上面以更简单的方式直接回答了这个问题。

于 2013-05-22T12:28:09.747 回答
1

你是什​​么意思“utf-8 int”?UTF8 是一种多字节编码方案,用于表示为 Unicode 数字的字母(技术上是字形)。在您的示例中,您使用了 ASCII 集中的琐碎字母,但该集与真正的 unicode/utf8 问题几乎没有关系。

对于简单的字母,您实际上可以只是 int cast:

print((int)'a') -> 97
print((int)'A') -> 65

但是您不能使用 16 位字符范围之外的字符来执行此操作。print((int)'二')有效,(以十六进制给出 20108 或 4E8C)但print((int)'')会给出编译错误,因为字符代码不适合 16 位(它应该是 131362 或十六进制的 20122,它被编码为三字节 UTF-8序列 239+191+189)

因此,对于代码高于0xFFFF您不能使用 int 转换的 Unicode 字符,您实际上必须认真考虑要解码的内容。如果您想要真正的 Unicode 点值,则必须逐字解码字节打印,但处理 IDE 实际上并不允许您这样做;它会告诉你 "".length() 是 1,而在真正的 Java 中它实际上是 3。在当前的处理中,没有办法实际获取代码高于0xFFFF.

更新

有人提到你实际上想要十六进制字符串。如果是这样,请使用内置hex函数。

println(hex((int)'a')) -> 00000061

如果您只需要 2、4 或 6 个字符,只需使用子字符串:

println(hex((int)'a').substring(4)) -> 0061
于 2013-05-25T14:22:21.470 回答