假设我有一个像“äa”这样的字符数组。 有没有办法获得第一个字符的ascii值(例如228),这是一个多字节? 即使我将我的数组转换为wchar_t *数组,我也无法获得“ä”的ascii值,因为它的长度为2个字节。 有没有办法做到这一点,我现在尝试2天:(
我正在使用gcc。
谢谢!
答案 0 :(得分:4)
你自相矛盾。像ä这样的国际字符(根据定义)不是在中的ASCII字符集,因此它们没有“ascii值”。
这取决于你的双字符数组的确切编码,如果你能得到单个字符的代码点,如果是,那么它将采用哪种格式。
答案 1 :(得分:2)
你真正想要做的就是从一个字符集转换到另一个字符集。如何做到这一点在很大程度上取决于您的操作系统,因此需要更多信息。您还需要指定您想要的内容?可能是ISO-8859-1的std :: string或char *?
答案 2 :(得分:1)
取决于char数组中使用的编码。
如果你的char数组是拉丁文1编码的,那么它长2个字节(加上可能是NUL终结符,我们不关心),那2个字节是:
请注意,Latin 1不是ASCII,0xE4不是ASCII值,它是拉丁语1(或Unicode)值。
你会得到这样的价值:
int i = (unsigned char) my_array[0];
如果你的char数组是UTF-8编码的,那么它是三个字节长,那些字节是:
要恢复使用UTF-8编码的字符的Unicode值,您需要根据http://en.wikipedia.org/wiki/UTF-8#Description自己实现它(通常是生产代码中的一个坏主意),否则您需要使用平台 - 特定的unicode-to-wchar_t转换例程。在linux上,这是mbstowcs
或iconv
,但对于单个字符,您可以使用mbtowc
,前提是为当前语言环境定义的多字节编码实际上是UTF-8:
wchar_t i;
if (mbtowc(&i, my_array, 3) == -1) {
// handle error
}
如果它是SHIFT-JIS那么这不起作用......
答案 3 :(得分:1)
有一个标准的C ++模板函数可以进行转换,ctype::narrow()。它是localization library的一部分。如果可能的话,它会将宽字符转换为当前本地的等效字符值。正如其他答案所指出的那样,并不总是有一个映射,这就是为什么ctype :: narrow()接受一个默认字符,如果没有映射它将返回它。
答案 4 :(得分:0)
你想要的是音译 - 将一种语言的字母转换成另一种语言。它没有关于unicode和wchars的东西。你需要有一个映射表。