public int ReadBinHex (byte [] buffer, int offset, int length)
{
if (offset < 0)
throw CreateArgumentOutOfRangeException ("offset", offset, "Offset must be non-negative integer.");
else if (length < 0)
throw CreateArgumentOutOfRangeException ("length", length, "Length must be non-negative integer.");
else if (buffer.Length < offset + length)
throw new ArgumentOutOfRangeException ("buffer length is smaller than the sum of offset and length.");
if (length == 0)
return 0;
char [] chars = new char [length * 2];
int charsLength = getter != null ?
getter (chars, 0, length * 2) :
ReadValueChunk (chars, 0, length * 2);
return XmlConvert.FromBinHexString (chars, offset, charsLength, buffer);
}