Separated out from prior proposal where it was mixed in with another topic.
dfdl:hexBinary($arg as xs:anyAtomicType?) as xs:hexBinary?
This function provides an extension to the behavior of the xs:hexBinary
constructor. The argument can be a string, in which case the behavior is
as the xs:hexBinary constructor. The argument can also be a long, unsignedLong,
or any subtype thereof, and in that case a string containing hexadecimal
digits is produced. The hexadecimal digits produced that are letters are
always uppercase. The number of hex digits in the resulting string is a
function of the input type. If byte or unsigned byte, exactly 2 hex digits
are produced, for short and unsignedShort, 4 hex digits, and so on. The
hex digits correspond to a big-endian representation of a twos-complement
binary representation of the argument value. So:
dfdl:short(xs:concat('x', dfdl:hexBinary(xs:short(208)))) eq xs:short(208)
is true, and a corresponding tautology holds for all the other DFDL functions
that construct integers from hexadecimal, if you replace the 208 above
with a value in range for the corresponding numeric type.
If the argument is a numeric literal, then the smallest signed integer
type (long, int, short, byte) is selected that can contain the value, and
the number of hexadecimal digits produced corresponds to that type. So:
dfdl:hexBinary(208) eq 'D0'
dfdl:hexBinary(-2084) eq 'F7FF'
--
Mike Beckerle | OGF DFDL Workgroup Co-Chair | Tresys Technology | www.tresys.com