Если я правильно понимаю, звучит так, будто вы хотите найти начало каждого символа UTF-8. Если так, то было бы довольно просто разобрать их (интерпретация их - другой вопрос). Но определение количества задействованных октетов четко определено в RFC :
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Например, если lb
имеет первый октет символа UTF-8, я думаю, что следующее определит количество задействованных октетов.
unsigned char lb;
if (( lb & 0x80 ) == 0 ) // lead bit is zero, must be a single ascii
printf( "1 octet\n" );
else if (( lb & 0xE0 ) == 0xC0 ) // 110x xxxx
printf( "2 octets\n" );
else if (( lb & 0xF0 ) == 0xE0 ) // 1110 xxxx
printf( "3 octets\n" );
else if (( lb & 0xF8 ) == 0xF0 ) // 1111 0xxx
printf( "4 octets\n" );
else
printf( "Unrecognized lead byte (%02x)\n", lb );
В конечном счете, однако, вам будет намного лучше использовать существующую библиотеку, как это предлагается в другом посте. Приведенный выше код может классифицировать символы в соответствии с октетами, но это не поможет «сделать» что-либо с ними после завершения.