Я не знаю, почему вы хотите сделать это, но здесь вы идете:
int i = 0;
for(; i < 0x80; ++i) // 0xxxxxxx
printf("%.2x\n", i);
for(; i < 0x800; ++i) // 110xxxxx 10xxxxxx
printf("%.2x %.2x\n", 0xc0 | (i >> 6), 0x80 | (i & 0x3f));
for(; i < 0x10000; ++i) // 1110xxxx 10xxxxxx 10xxxxxx
if(i < 0xd800 || i >= 0xe000) // skip surrogates
printf("%.2x %.2x %.2x\n", 0xe0 | (i >> 12), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));
for(; i < 0x110000; ++i) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
printf("%.2x %.2x %.2x %.2x\n", 0xf0 | (i >> 18), 0x80 | ((i >> 12) & 0x3f), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));
Что именно вы имеете в виду под «невозможных дел»? – SingerOfTheFall
Вы читали, например. Википедия (и поняла)? Потому что ваш код вздор (если вы хотите напечатать все возможные байтовые байты utf8). Википедия четко описывает, какие ограничения существуют для какой длины байта – deviantfan
В UTF-8 все символы, звездочки с 0x10, являются продолжениями одного utf8-char, представленного более чем в 1 байт. Например, пример 11100100 10xxxxx это допустимый случай, но 11100100 11xxxxx он недопустим, например. –