def read_value(vr, length)
      unless vr == "OW" or vr == "OB" or vr == "OF" or vr == "UN"
        # Since the binary string has already been extracted for this data element, we must first "rewind":
        @stream.skip(-length)
        # Decode data:
        value = @stream.decode(length, vr)
        # If the returned value is an array of multiple values, we will join these values to a string with the separator "\":
        value = value.join("\\") if value.is_a?(Array)
      else
        # No decoded value:
        value = nil
      end
      return value
    end
def read_value(vr, length)
      unless vr == "OW" or vr == "OB" or vr == "OF" or vr == "UN"
        # Since the binary string has already been extracted for this data element, we must first "rewind":
        @stream.skip(-length)
        # Decode data:
        value = @stream.decode(length, vr)
        # If the returned value is an array of multiple values, we will join these values to a string with the separator "\":
        value = value.join("\\") if value.is_a?(Array)
      else
        # No decoded value:
        value = nil
      end
      return value
    end
Decodes the data element's value (varying length).

 * Data elements which have multiple numbers as value, will have these numbers joined to a string, separated by the \ character.
 * For some value representations (OW, OB, OF, UN), a value is not processed, and nil is returned.

 This means that for data like pixel data, compressed data, unknown data, a value is not
 available in the data element, and must be processed from the data element's binary variable.

 @param [String] vr the value representation of the data element which the value to be decoded belongs to
 @param [Integer] length the length of the binary string to be extracted
 @return [String, NilClass] the data element value