Inferno OS Wiki
Advertisement

ИМЯ

byte2char, char2byte - преобразование между символами и байтами

РЕЗЮМЕ

include "sys.m";
sys := load Sys Sys->PATH;

byte2char: fn(buf: array of byte, n: int): (int, int, int);
char2byte: fn(c: int, buf: array of byte, n: int): int;

ОПИСАНИЕ

Byte2char конвертирует последовательность байт в один символ Unicode. Buf это массив байт и n это индекс первого байта для проверки в массиве. Функция возвращает тьюпл, скажем, (c, length, status), определяющий результат преобразования: c это результирующий символ Unicode, status имеет не нулевое значение если байты являются допустимой последовательностью UTF или нуль в противном случае, и length это количество байт участвовавших в преобразовании. Если входная последовательность недостаточно длинна для установления ее допустимости, byte2char расходует ноль байт; если входная последовательность не является допустимой, byte2char расходует один входной байт и генерирует символ ошибки (Sys->UTFerror, 16r80),который печатается в большинстве шрифтов как заключенный в прямоугольник знак вопроса.
Char2byte выполняет противоположную byte2char функцию. Она преобразует Unicode символ c, в последовательность UTF байт, которая помещается в успешные байты в массив начиная с n-ой позиции buf[.IRn]. Длина наибольшей последовательности UTF для одиночного символа Unicode является Sys->UTFmax (3) байта. Если преобразование было успешным, char2byte возвращает количество байт помещенных в буфер. Если буфер слишком мал для хранения результата, char2byte возвращает ноль и оставляет массив без изменений.

ИСХОДНЫЙ ТЕКСТ

/libinterp/runt.c

СМОТРИ ТАКЖЕ

sys-intro(2), sys-utfbytes(2), utf(6)
Advertisement