diff --git a/src/hack/string/utf8_len.hpp b/src/hack/string/utf8_len.hpp index 0a22241..3fdfb6e 100755 --- a/src/hack/string/utf8_len.hpp +++ b/src/hack/string/utf8_len.hpp @@ -6,6 +6,12 @@ namespace hack::string { // подсчет кол-ва символов + // В шестнадцатеричной системе счисления, 0xC0 представляет собой число 192. В бинарной системе это 11000000. + // Это число используется как маска для проверки байта в UTF-8 последовательности. И проверка в коде использует битовую операцию "И" (&) с маской 0xC0, чтобы проверить, является ли текущий + // байт началом UTF-8 последовательности. В UTF-8 первый байт символа, который не является частью + // многобайтовой последовательности, должен начинаться с битов 0 или 110 (в шестнадцатеричной системе это 0x00 или 0xC0). + // Проверка (c & 0xC0) != 0x80 используется для определения, является ли текущий байт продолжением UTF-8 многобайтовой последовательности. + // Валидные байты продолжения в UTF-8 должны начинаться с бита 10 (в бинарной системе это 0x80 или 10000000). inline std::size_t utf8_len(const std::string& s) { std::size_t length = 0; @@ -21,3 +27,4 @@ namespace hack::string return length; } } +