Beispiel #1
0
        private int GetCharCount(byte[] bytes, int index, int count, DbcsDecoder decoder)
        {
            var charCount = 0;

            for (var i = 0; i < count; index++, charCount++, i++)
            {
                ushort u = 0;
                if (decoder != null && decoder.PendingByte != 0)
                {
                    u = decoder.PendingByte;
                    decoder.PendingByte = 0;
                }

                u = (ushort)(u << 8 | bytes[index]);
                var c = _dbcsToUnicode[u];
                if (c != LeadByteChar)
                {
                    continue;
                }
                if (i < count - 1)
                {
                    index++;
                    i++;
                }
                else if (decoder != null)
                {
                    decoder.PendingByte = bytes[index];
                    return(charCount);
                }
            }

            return(charCount);
        }
Beispiel #2
0
        private int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex, DbcsDecoder decoder)
        {
            var charCount = 0;

            for (var i = 0; i < byteCount; byteIndex++, charIndex++, charCount++, i++)
            {
                ushort u = 0;
                if (decoder != null && decoder.PendingByte != 0)
                {
                    u = decoder.PendingByte;
                    decoder.PendingByte = 0;
                }

                u = (ushort)(u << 8 | bytes[byteIndex]);
                var c = _dbcsToUnicode[u];
                if (c == LeadByteChar)
                {
                    if (i < byteCount - 1)
                    {
                        byteIndex++;
                        i++;
                        u = (ushort)(u << 8 | bytes[byteIndex]);
                        c = _dbcsToUnicode[u];
                    }
                    else if (decoder == null)
                    {
                        c = '\0';
                    }
                    else
                    {
                        decoder.PendingByte = bytes[byteIndex];
                        return(charCount);
                    }
                }
                if (c == 0 && u != 0)
                {
                    chars[charIndex] = '?';
                }
                else
                {
                    chars[charIndex] = c;
                }
            }

            return(charCount);
        }