blob: 202c75019b78810f0786a58fb28bf6606b6b44a1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
static uint32_t
utf8_encode(uint8_t out[4], uint32_t cp)
{
uint32_t result;
if (cp <= 0x7F) {
out[0] = cp & 0x7F;
result = 1;
} else if (cp <= 0x7FF) {
result = 2;
out[0] = ((cp >> 6) & 0x1F) | 0xC0;
out[1] = ((cp >> 0) & 0x3F) | 0x80;
} else if (cp <= 0xFFFF) {
result = 3;
out[0] = ((cp >> 12) & 0x0F) | 0xE0;
out[1] = ((cp >> 6) & 0x3F) | 0x80;
out[2] = ((cp >> 0) & 0x3F) | 0x80;
} else if (cp <= 0x10FFFF) {
result = 4;
out[0] = ((cp >> 18) & 0x07) | 0xF0;
out[1] = ((cp >> 12) & 0x3F) | 0x80;
out[2] = ((cp >> 6) & 0x3F) | 0x80;
out[3] = ((cp >> 0) & 0x3F) | 0x80;
} else {
//out[0] = '?';
result = 0;
}
return result;
}
|