Re: Converting packed decimal to a char array
Barbara Morris <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <[email protected]> |
On 2015-03-11 08:26, Tim Bronski wrote:
> It works with all decimal lengths and positions. The move to a (30,0)
> variable is because you need a common length for sprintf (or printf) but
> the decimals can vary.
>
If fulldec is defined as 63,0 then it works for any size of packed variable.
Tim, your version was copying Len bytes in the memcpy which was about
twice too much. This version calculates the number of bytes in the
packed variable, and uses that for both the offset and the memcpy length.
void printdec(void *A, int Len, int Prec)
{
decimal(63,0) fulldec;
int offset;
int bytes = (Len / 2) + 1;
// Move packed number to a 63,0 variable.
offset=32 - bytes;
fulldec=0;
memcpy(((char *) &fulldec)+offset, A, bytes);
// Now print it.
printf("%D(63,*)\n", Prec, s.fulldec) ;
--
Barbara
--
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list
To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected]
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected]
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.