如何在处理中将 char 数据类型转换为其 utf-8 int 表示形式?
所以如果我有一个数组 ['a', 'b', 'c'] 我想获得另一个数组 [61, 62, 63]。
如何在处理中将 char 数据类型转换为其 utf-8 int 表示形式?
所以如果我有一个数组 ['a', 'b', 'c'] 我想获得另一个数组 [61, 62, 63]。
在我的回答之后,我想出了一种更简单、更直接的方法来转换为你想要的数字类型。你想要的 '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 块中。但是,没有必要看到上面以更简单的方式直接回答了这个问题。
你是什么意思“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