Just like the encoder, you can choose to pre-allocate the decoder's output buffer manually yourself or you can let the decoder automatically allocate the needed space. If you choose to let the decoder automatically allocate the needed space, you should set the pointer (which will reference the decoded data) to NULL and call the decoder as follows:
int myPduNum = MyASN1Type_PDU;
. . . .
DecodedDataPtr = NULL;
rc = ossDecode(world, &myPduNum, &encodedData, (void **)&DecodedDataPtr);
The above code excerpt will cause the decoder to use its memory manager to automatically allocate the needed space for its output.
Please note that you may not reuse the memory allocated by the decoder for another call to the decoder. Rather, you have to free it up with the ossFreeBuf() function after you are done using it.
On the other hand, if you choose to pre-allocate your own buffer, you would have to call ossSetDecodingLength() to set the length of the buffer provided in addition to setting the last parameter to the address of the pointer that points to your pre-allocated buffer.
The samples included with some of the Knowledge Center answers are meant for your general understanding of the OSS products. Different versions of the products might produce slightly different outputs. Consult the products documentation and samples for the most up-to-date products information and code examples.
Test drive the OSS Nokalva ASN.1, LTE, and XML Tools now! Your trial includes complete software, documentation, sample programs, free 24x7 technical support and more.
Our expert personnel can help you learn ASN.1!
We offer 4-day ASN.1 courses at our headquarters or your premises.