Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "absl/strings/internal/utf8.h"
00018
00019 namespace absl {
00020 namespace strings_internal {
00021
00022 size_t EncodeUTF8Char(char *buffer, char32_t utf8_char) {
00023 if (utf8_char <= 0x7F) {
00024 *buffer = static_cast<char>(utf8_char);
00025 return 1;
00026 } else if (utf8_char <= 0x7FF) {
00027 buffer[1] = 0x80 | (utf8_char & 0x3F);
00028 utf8_char >>= 6;
00029 buffer[0] = 0xC0 | utf8_char;
00030 return 2;
00031 } else if (utf8_char <= 0xFFFF) {
00032 buffer[2] = 0x80 | (utf8_char & 0x3F);
00033 utf8_char >>= 6;
00034 buffer[1] = 0x80 | (utf8_char & 0x3F);
00035 utf8_char >>= 6;
00036 buffer[0] = 0xE0 | utf8_char;
00037 return 3;
00038 } else {
00039 buffer[3] = 0x80 | (utf8_char & 0x3F);
00040 utf8_char >>= 6;
00041 buffer[2] = 0x80 | (utf8_char & 0x3F);
00042 utf8_char >>= 6;
00043 buffer[1] = 0x80 | (utf8_char & 0x3F);
00044 utf8_char >>= 6;
00045 buffer[0] = 0xF0 | utf8_char;
00046 return 4;
00047 }
00048 }
00049
00050 }
00051 }