The UNI message library contains a number of utility functions to handle NSAP and E.164 addresses.
The function uni_str2nsap parses a string and interprets it as an NSAP address. The string should consist of exact 40 hexadecimal digits (upper and lower case are allowed) and any number of dots at any position. Any other character is illegal. The resulting NSAP address is written to the buffer pointed to by nsap. This buffer should be at least 20 bytes. On success the funtion returns 0. If an parsing error happens -1 is returned.
The function uni_nsap2str converts the NSAP address pointed to by nsap into a string. For some commonly used NSAP formats (those with leading octets 0x39, 0x45 or 0x47) dots may be inserted to make the address more readable by passing a non-0 value in dots. The buffer pointed to by str should be large enough to hold the resulting string plus the terminating NUL. A size of 80 byte is large enough for all cases.
The function uni_prefix2str converts an NSAP prefix to a string. The length of the NSAP prefix in bytes is passed in len. "uni_nsap2str(str, nsap, dots)" is equivalent to "uni_prefix2str(str, nsap, 20, dots)".
The function uni_e1642nsap converts an E.164 address given as an ASCII string to an embedded E.164 NSAP address. The string pointed to by e164 must consist of at least 1 and not more than 15 ASCII digits. The function returns 0 on success and -1 if the E.164 address was malformed.
The function uni_nsap2e164 extracts the E.164 address from an embedded E.164 NSAP address. The argument check specifies whether the NSAP address should be checked for correct syntax. If check is 0 the last 11 bytes of the address are ignored. If check is 1 the last 11 bytes except the selector byte must be zero. If check is 2 the last 11 bytes must be zero. The function returns 0 on success and -1 when the NSAP address was not an embedded E.164 NSAP or one of the additional checks failed.