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

时间:2013-05-22 01:16:22

标签: processing.js processing

如何将char数据类型转换为Processing?

中的utf-8 int表示形式

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

依此类推。

修改

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

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块中。然而,没有必要看到以上内容直接以更简单的方式回答问题。

答案 1 :(得分: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的Unicode字符,您不能使用int强制转换,并且您实际上必须仔细考虑要解码的内容。如果你想要真正的Unicode点值,你必须逐字解码字节打印,但Processing IDE实际上并没有让你这样做;它会告诉你“。。length()是1,当它在真正的Java中它实际上是3.在当前处理中 - 没有办法为代码高于{{1}的任何字符实际获取Unicode值}。

<强>更新

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

hex

如果您只需要2个,4个或6个字符,请使用substring:

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