Пример #1
0
        private string TakeString(CharCodeType type, byte[] data, ref int offset, ref int take_pos)
        {
            var byte_num = 0;

            /* 文字の最初のデータを検索 */
            while (offset < data.Length)
            {
                if (IsTopCharData(type, data[offset], ref byte_num))
                {
                    break;
                }
                offset++;
            }

            /* 有効なデータが見つからなかった場合は終了 */
            if (offset == data.Length)
            {
                return(null);
            }

            /* 有効な文字が見つかってもデータが足りなければ終了 */
            if ((offset + byte_num) > data.Length)
            {
                offset = data.Length;
                return(null);
            }

            /* 文字列に変換 */
            var result = char_encoder_.GetString(data.Skip(offset).Take(byte_num).ToArray());

            take_pos = offset;
            offset  += byte_num;

            return(result);
        }
Пример #2
0
        public void SetCharCode(CharCodeType type)
        {
            char_code_ = type;

            switch (type)
            {
            case CharCodeType.ASCII:    char_encoder_ = Encoding.ASCII;             break;

            case CharCodeType.ShiftJIS: char_encoder_ = Encoding.GetEncoding(932);  break;

            case CharCodeType.UTF8:     char_encoder_ = Encoding.UTF8;              break;

            default:                    char_encoder_ = null;                       break;
            }

            ViewUpdate();
        }
Пример #3
0
        private bool IsTopCharData(CharCodeType type, byte data, ref int byte_num)
        {
            var result = false;

            switch (char_code_)
            {
            case CharCodeType.ASCII:
            {
                byte_num = 1;
                result   = true;
            }
            break;

            case CharCodeType.ShiftJIS:
            {
                if (((data >= 0x81) && (data <= 0x9F)) ||
                    ((data >= 0xE0) && (data <= 0xFC))
                    )
                {
                    /* マルチバイトの1文字目 */
                    byte_num = 2;
                }
                else
                {
                    /* 1バイト文字 */
                    byte_num = 1;
                }
                result = true;
            }
            break;

            case CharCodeType.UTF8:
            {
                if ((data & 0xFE) == 0xFC)
                {
                    byte_num = 6; result = true;
                }
                else if ((data & 0xFC) == 0xF8)
                {
                    byte_num = 5; result = true;
                }
                else if ((data & 0xF8) == 0xF0)
                {
                    byte_num = 4; result = true;
                }
                else if ((data & 0xF0) == 0xE0)
                {
                    byte_num = 3; result = true;
                }
                else if ((data & 0xE0) == 0xC0)
                {
                    byte_num = 2; result = true;
                }
                else if ((data & 0x80) == 0x00)
                {
                    byte_num = 1; result = true;
                }
            }
            break;
            }

            return(result);
        }