Создание Windows-приложений на основе Visual C#

         

Класс FromQuotedPrintableTransform.cs


Листинг 3.7.

(html, txt)


inputCount = tmp.Length; _buf = null; } else { byte [] tmp = new byte[inputCount]; Array.Copy(inputBuffer, inputOffset, tmp, 0, inputCount); inputBuffer = tmp; }

int c = 0; int obi = outputOffset;

while (c < inputCount) { byte cb = inputBuffer[c++]; // skip CRLFs if (cb == '=') { // impossible to get next 2 bytes, save unparsed characters // for next session if (c + 1 >= inputCount) { int len = inputCount - c; _buf = new byte[len + 1]; // +1 is for '=' Array.Copy(inputBuffer, c - 1, _buf, 0, len + 1); break; }

// skip =\r\n if (!(inputBuffer[c] == '\r' && inputBuffer[c + 1] == '\n')) { // TODO Add check. Uppercase letters must be used (=DD); // lowercase letters are not allowed. try { byte b = Convert.ToByte(Encoding.ASCII.GetString(inputBuffer, c, 2), 16); outputBuffer[obi++] = b; } catch (FormatException e) { throw new ParseException("Incorrect sequence. Are you sure that it's quoted-printable?", e); } }

// take next sequence c += 2; } // incorrect characters for quoted-printable, just skip it else if (!(cb == '\r' || cb == '\n')) { outputBuffer[obi++] = cb; } }

return obi - outputOffset; }

/// <summary> /// Конвертирование указанного участка входящего массива байтов из quoted-printable (RFC 2045 (6.7)). /// </summary> /// <param name="inputBuffer">Входящий массив байтов.</param> /// <param name="inputOffset">Начальная отметка участка, который нужно конвертировать.</param> /// <param name="inputCount">Количество байтов после индекса начала участка.</param> /// <returns>Полученный массив байтов.</returns> public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { byte [] b = new byte[inputCount]; int s = TransformBlock(inputBuffer, inputOffset, inputCount, b, 0);

byte [] c = new byte[s]; Array.Copy(b, 0, c, 0, s); return c; } } }

Листинг 3.7.


Содержание раздела