如何将char数据类型转换为Processing?
中的utf-8 int表示形式所以如果我有一个阵列[' a',' b',' c']我想获得另一个阵列[61, 62,63]。
答案 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