FreeCalypso > hg > fc-pcsc-tools
view libcommon/number_decode.c @ 110:2aa92dfcb4b5
fc-simtool iccid, imsi, spn: support output redirection
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 19 Feb 2021 06:59:56 +0000 |
parents | f5a26c1d0b93 |
children |
line wrap: on
line source
/* * This module implements functions for decoding phone numbers. */ #include <sys/types.h> static char gsm_address_digits[16] = {'0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?'}; decode_phone_number(data, nbytes, out) u_char *data; unsigned nbytes; char *out; { u_char *dp, *endp; int c; dp = data; endp = data + nbytes; while (dp < endp) { c = *dp & 0xF; if (c == 0xF) return(-1); *out++ = gsm_address_digits[c]; c = *dp >> 4; if (c == 0xF) { if (dp + 1 == endp) break; else return(-1); } *out++ = gsm_address_digits[c]; dp++; } *out = '\0'; return(0); } decode_address_digits(inbuf, outbuf, ndigits) u_char *inbuf; char *outbuf; unsigned ndigits; { u_char *inp = inbuf; char *outp = outbuf; unsigned n = 0, b; while (n < ndigits) { b = *inp++; *outp++ = gsm_address_digits[b & 0xF]; n++; if (n >= ndigits) break; *outp++ = gsm_address_digits[b >> 4]; n++; } *outp = '\0'; }