计算utf8的所有可能值

Calculate all possible values of utf8

本文关键字:有可能 utf8 计算      更新时间:2023-10-16

我想打印所有可能的UTF-8值。类似这样:

  uint32_t max = 0xFFFFFFFF;
  for (uint32_t i = 0; i <= max; i++)
  {
    std::cout << std::hex << i << std::endl;    
  }

但是我打印了很多不可能的情况。有更好的主意吗?

我不知道你为什么要这样做,但是你可以这样做:

int i = 0;
for(; i < 0x80; ++i) // 0xxxxxxx
    printf("%.2xn", i);
for(; i < 0x800; ++i) // 110xxxxx 10xxxxxx
    printf("%.2x %.2xn", 0xc0 | (i >> 6), 0x80 | (i & 0x3f));
for(; i < 0x10000; ++i) // 1110xxxx 10xxxxxx 10xxxxxx
    if(i < 0xd800 || i >= 0xe000) // skip surrogates
        printf("%.2x %.2x %.2xn", 0xe0 | (i >> 12), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));
for(; i < 0x110000; ++i) // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    printf("%.2x %.2x %.2x %.2xn", 0xf0 | (i >> 18), 0x80 | ((i >> 12) & 0x3f), 0x80 | ((i >> 6) & 0x3f), 0x80 | (i & 0x3f));