public void write_utf8(uint val) { if (val < 0x80) { writebits(8, val); return; } int bytes = (BitReader.log2i(val) + 4) / 5; int shift = (bytes - 1) * 6; writebits(8, (256U - (256U >> bytes)) | (val >> shift)); while (shift >= 6) { shift -= 6; writebits(8, 0x80 | ((val >> shift) & 0x3F)); } }