Это позволяет коду записывать большие объемы данных Unicode в файл без преобразования.Во время загрузки вы всегда должны проверять порядок байтов.Если вам повезет, вам не нужно преобразование.Таким образом, в 66% случаев вам не требуется преобразование, и только на 33% вы должны преобразовать.
В памяти вы можете затем получить доступ к данным, используя собственные типы данных вашего ЦП, что обеспечивает эффективную обработку.
Таким образом, каждый может быть настолько счастлив, насколько это возможно.
Так что в вашем случае вам нужно проверять кодировку при загрузке данных, но в ОЗУ вы можете использовать массив short int
обработать его.
[EDIT] Самый быстрый способ преобразовать 16-битное значение в 2 октета:
char octet[2];
short * prt = (short*)&octet[0];
*ptr = 12345;
Теперь вы не знаете, является ли octet[0]
младшим или верхним8 битЧтобы это выяснить, напишите известное значение, а затем изучите его.
Это даст вам одну из кодировок;родной для вашего процессора.
Если вам нужна другая кодировка, вы можете поменять местами октеты при записи их в файл (т.е. записать их octet[1],octet[0]
) или свой код.
Если у вас есть несколько октетов, вы можете использовать 32-битные целые числа для замены двух 16-битных значений одновременно:
char octet[4];
short * prt = (short*)&octet[0];
*ptr ++ = 12345;
*ptr ++ = 23456;
int * ptr32 = (int*)&octet[0];
int val = ((*ptr32 << 8) & 0xff00ff00) || (*ptr >> 8) & 0x00ff00ff);