Re: Converting packed decimal to a char array
Tim Bronski <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <[email protected]> |
Hi Jevgeni,
Sorry, I got too busy last week to look at this. Here's one way to do what you're trying to do:
void printdec(void *A, int Len, int Prec)
{
decimal(30,0) fulldec;
int offset;
// Move packed number to a 30,0 variable.
offset=16-Len/2;
if (Len & 1)
offset--;
fulldec=0;
memcpy(((char *) &fulldec)+offset, A, Len);
// Now print it.
printf("%D(30,*)\n", Prec, fulldec) ;
}
On 3/4/2015 4:46 PM, Jevgeni Astanovski wrote:
> Tim,
> length and precision are not a problem. The question is how to pass
> this decimal value to the function.
> The only way that I can imagine is as a void pointer. But you cannot
> apply indirection to void pointers AFAIK.
> The below program does not compile:
>
> void printdec(void *A, int Len, int Prec) ;
>
> int main ( )
> {
> decimal (15,9) A ;
>
> A = 17.5D ;
> printdec(&A, digitsof(A), precisinof(A)) ;
> return(0) ;
> }
>
> void printdec(void *A, int Len, int Prec)
> {
> printf("%D(*,*)\n", Len, Prec, *A) ;
> }
>
>
>
> On Fri, Jan 9, 2015 at 5:25 PM, Tim Bronski <[email protected]> wrote:
>> Well your function needs to know the length and decimal places. So if you
>> know those and can pass them to the function then just build the format
>> string before using it in sprintf.
>>
>> On 1/9/2015 10:00 AM, Jevgeni Astanovski wrote:
>>> Hi all,
>>>
>>> spend a lot of time and feeling like I run into a dead cycle with a
>>> problem, that looks trivial.
>>>
>>> I have packed decimals in my C programs that I need to convert to a
>>> char array, representing the number (not zero terminated string).
>>>
>>> For example:
>>>
>>> decimal (15,9) A ;
>>> char szTemp[32], sField[16] ;
>>>
>>> sprintf(szTemp, "%016D(15,9)", A) ;
>>> memcpy(sField, szTemp, 16) ;
>>>
>>> What I want to achieve is get a function, that receives A and returns
>>> sField.
>>> Of course it must support any types of decimal - not only decimal
>>> (15,9) but others like decimal(11,7), decimal (15,0), decimal (5,0)
>>> and so on. And, of course, decimal can be positive or negative...
>>>
>>>
>>> Any ideas?
>>>
>>> Jevgeni.
>>
>> --
>> Need secure FTP? Download your native sFTP solution here:
>> www.arpeggiosoftware.com
>> --
>> 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.
>>
--
Need secure FTP? Download your native sFTP solution here:
www.arpeggiosoftware.com
--
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.