Зависит от кодировки, используемой в вашем массиве символов.
Если ваш массив символов кодируется латиницей 1, то он имеет длину 2 байта (плюс, возможно, терминатор NUL, нам все равно), и эти 2 байта:
- 0xE4 (строчные буквы умлаут)
- 0x61 (строчные буквы a).
Обратите внимание, что Latin 1 не является ASCII, а 0xE4 не является значением ASCII, это значение Latin 1 (или Unicode).
Вы бы получили значение следующим образом:
int i = (unsigned char) my_array[0];
Если ваш массив символов имеет кодировку UTF-8, то он имеет длину три байта и эти байты:
- двоичный код 11000011 (первый байт в кодировке UTF-8 0xE4)
- двоичный 10100100 (второй байт в кодировке UTF-8 0xE4)
- 0x61 (строчные буквы)
Чтобы восстановить значение Unicode символа, закодированного с помощью UTF-8, вам нужно либо реализовать его самостоятельно на основе http://en.wikipedia.org/wiki/UTF-8#Description (обычно это плохая идея в рабочем коде), либо вам нужно использовать платформу -конкретная процедура преобразования unicode в wchar_t. В linux это mbstowcs
или iconv
, хотя для одного символа вы можете использовать mbtowc
при условии, что многобайтовая кодировка, определенная для текущей локали, на самом деле UTF-8:
wchar_t i;
if (mbtowc(&i, my_array, 3) == -1) {
// handle error
}
Если это SHIFT-JIS, то это не сработает ...