public static CoapOption Decode(byte[] buffer, int index, int previousDelta, out int newIndex) { int deltaPart = buffer[index] >> 0x04; int deltaExtendedLength = deltaPart <= 12 ? 0 : deltaPart == 13 ? 1 : 2; int valuePart = buffer[index] & 0x0F; int valueExtendedLength = valuePart <= 12 ? 0 : valuePart == 13 ? 1 : 2; index++; int optionTypeValue = deltaExtendedLength == 0 ? deltaPart + previousDelta : deltaExtendedLength == 1 ? (deltaPart + previousDelta) + (int)buffer[index++] : (deltaPart + 255 + previousDelta) + (int)(buffer[index++] | buffer[index++]); OptionType option = (OptionType)optionTypeValue; int valueLength = valueExtendedLength == 0 ? valuePart : valueExtendedLength == 1 ? valuePart + (int)buffer[index++] : (valuePart + 255) + (int)(buffer[index++] | buffer[index++]); byte[] encodedValue = new byte[valueLength]; Buffer.BlockCopy(buffer, index, encodedValue, 0, valueLength); newIndex = index + valueLength; object value = option.DecodeOptionValue(encodedValue); return(new CoapOption(option, value)); }