HLFX.Ru Forum
Показать все 4 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- что это такое ? (https://hlfx.ru/forum/showthread.php?threadid=5956)


Отправлено илья2 03-03-2023 в 06:56:

Question что это такое ?

// Decode one character from a UTF-8 encoded string. Treats 6-byte CESU-8 sequences
// as a single character, as if they were a correctly-encoded 4-byte UTF-8 sequence.

C++ Source Code:
1
int Q_UTF8ToUChar32( const char *pUTF8_, unsigned int &uValueOut, bool &bErrorOut )
2
{
3
  const unsigned char *pUTF8 = (const unsigned char*)pUTF8_;
4
 
5
  int nBytes = 1;
6
  unsigned int uValue = pUTF8[0];
7
  unsigned int uMinValue = 0;
8
 
9
  // 0....... single byte
10
  if( uValue < 0x80 )
11
    goto decodeFinishedNoCheck;
12
 
13
  // Expecting at least a two-byte sequence with 0xC0 <= first <= 0xF7 (110...... and 11110...)
14
  if( ( uValue - 0xC0u ) > 0x37u || ( pUTF8[1] & 0xC0 ) != 0x80 )
15
    goto decodeError;
16
 
17
  uValue = ( uValue << 6 ) - ( 0xC0 << 6 ) + pUTF8[1] - 0x80;
18
  nBytes = 2;
19
  uMinValue = 0x80;
20
 
21
  // 110..... two-byte lead byte
22
  if( !( uValue & ( 0x20 << 6 ) ) )
23
    goto decodeFinished;
24
 
25
  // Expecting at least a three-byte sequence
26
  if( ( pUTF8[2] & 0xC0 ) != 0x80 )
27
    goto decodeError;
28
 
29
  uValue = ( uValue << 6 ) - ( 0x20 << 12 ) + pUTF8[2] - 0x80;
30
  nBytes = 3;
31
  uMinValue = 0x800;
32
 
33
  // 1110.... three-byte lead byte
34
decodeFinished:
35
  if( uValue >= uMinValue && Q_IsValidUChar32( uValue ) )
36
  {
37
  decodeFinishedNoCheck:
38
    uValueOut = uValue;
39
    bErrorOut = false;
40
    return nBytes;
41
  }
42
decodeError:
43
  uValueOut = '?';
44
  bErrorOut = true;
45
  return nBytes;
46
 
47
decodeFinishedMaybeCESU8:
48
  // Do we have a full UTF-16 surrogate pair that's been UTF-8 encoded afterwards?
49
  // That is, do we have 0xD800-0xDBFF followed by 0xDC00-0xDFFF? If so, decode it all.
50
  if( ( uValue - 0xD800u ) < 0x400u && pUTF8[3] == 0xED && (unsigned char)( pUTF8[4] - 0xB0 ) < 0x10 && ( pUTF8[5] & 0xC0 ) == 0x80 )
51
  {
52
    uValue = 0x10000 + ( ( uValue - 0xD800u ) << 10 ) + ( (unsigned char)( pUTF8[4] - 0xB0 ) << 6 ) + pUTF8[5] - 0x80;
53
    nBytes = 6;
54
    uMinValue = 0x10000;
55
  }
56
  goto decodeFinished;
57
}

объясните для чего и зачем нужна эта функция ? и можно ли её удалить ?

__________________
илья


Отправлено Дядя Миша 03-03-2023 в 07:07:

Удоляй смело )

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FiEctro 03-03-2023 в 08:30:

Гугл перевод:

Цитата:
// Декодировать один символ из строки в кодировке UTF-8. Обрабатывает 6-байтовые последовательности CESU-8.
// как один символ, как если бы они были правильно закодированной 4-байтовой последовательностью UTF-8.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено hgrunt_2020 03-03-2023 в 12:41:

А зочем удалять?

__________________
И главное, Артём, помни: не ешь желтый снег!


Временная зона GMT. Текущее время 19:57.
Показать все 4 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024