1バイトかどうか (c1 & 0x80) == 0
2バイトかどうか (c1 & 0xe0) == 0xc0
3バイトかどうか (c1 & 0xf0) == 0xe0
4バイトかどうか (c1 & 0xf8) == 0xf0
5バイトかどうか (c1 & 0xfc) == 0xf8
6バイトかどうか (c1 & 0xfe) == 0xfc

2バイトのとき (c1 & 0x1f) << 6 | (c2 & 0x3f)
3バイトのとき (c1 & 0x0f) << 12 | (c2 & 0x3f) << 6 | (c3 & 0x3f)
4バイトのとき (c1 & 0x07) << 18 | (c2 & 0x3f) << 12 | (c3 & 0x3f) << 6 | (c4 & 0x3f)
5バイトのとき (c1 & 0x03) << 24 | (c2 & 0x3f) << 18 | (c3 & 0x3f) << 12 | (c4 & 0x3f) << 6 | (c5 & 0x3f)
6バイトのとき (c1 & 0x01) << 30 | (c2 & 0x3f) << 24 | (c3 & 0x3f) << 18 | (c4 & 0x3f) << 12 | (c5 & 0x3f) << 6 | (c6 & 0x3f)