| File: FrameworkFork\Microsoft.Xml\Xml\BinHexEncoder.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace Microsoft.Xml { using System; internal static partial class BinHexEncoder { private const string s_hexDigits = "0123456789ABCDEF"; private const int CharsChunkSize = 128; internal static void Encode(byte[] buffer, int index, int count, XmlWriter writer) { if (buffer == null) { throw new ArgumentNullException("buffer"); } if (index < 0) { throw new ArgumentOutOfRangeException("index"); } if (count < 0) { throw new ArgumentOutOfRangeException("count"); } if (count > buffer.Length - index) { throw new ArgumentOutOfRangeException("count"); } char[] chars = new char[(count * 2) < CharsChunkSize ? (count * 2) : CharsChunkSize]; int endIndex = index + count; while (index < endIndex) { int cnt = (count < CharsChunkSize / 2) ? count : CharsChunkSize / 2; int charCount = Encode(buffer, index, cnt, chars); writer.WriteRaw(chars, 0, charCount); index += cnt; count -= cnt; } } internal static string Encode(byte[] inArray, int offsetIn, int count) { if (null == inArray) { throw new ArgumentNullException("inArray"); } if (0 > offsetIn) { throw new ArgumentOutOfRangeException("offsetIn"); } if (0 > count) { throw new ArgumentOutOfRangeException("count"); } if (count > inArray.Length - offsetIn) { throw new ArgumentOutOfRangeException("count"); } char[] outArray = new char[2 * count]; int lenOut = Encode(inArray, offsetIn, count, outArray); return new String(outArray, 0, lenOut); } private static int Encode(byte[] inArray, int offsetIn, int count, char[] outArray) { int curOffsetOut = 0, offsetOut = 0; byte b; int lengthOut = outArray.Length; for (int j = 0; j < count; j++) { b = inArray[offsetIn++]; outArray[curOffsetOut++] = s_hexDigits[b >> 4]; if (curOffsetOut == lengthOut) { break; } outArray[curOffsetOut++] = s_hexDigits[b & 0xF]; if (curOffsetOut == lengthOut) { break; } } return curOffsetOut - offsetOut; } // function } // class } // namespace