The ifx_int8cvasc() function

The ifx_int8cvasc() function converts a value held as printable characters in a C char type into an int8 type number.

Syntax

mint ifx_int8cvasc(strng_val, len, int8_val)
   char *strng_val
   mint len;
   ifx_int8_t *int8_val;
strng_val
A pointer to a string.
len
The length of the strng_val string.
int8_val
A pointer to the int8 structure where ifx_int8cvasc() places the result of the conversion.

Usage

The character string, strng_val, can contain the following symbols:
  • A leading sign, either a plus (+) or minus (-).
  • An exponent that is preceded by either e or E. You can precede the exponent by a sign, either a plus (+) or minus (-).

The strng_val character string does not contain a decimal separator or digits to the right of the decimal separator. The ifx_int8cvasc() function truncates the decimal separator and any digits to the right of the decimal separator. The ifx_int8cvasc() function ignores leading spaces in the character string.

When you use a nondefault locale (one other than US English), ifx_int8cvasc() supports non-ASCII characters in the strng_val character string. For more information, see the HCL OneDB™ GLS User's Guide.

Return codes

0
The conversion was successful.
-1213
The string has non-numeric characters.
-1284
The operation resulted in overflow or underflow.

Example

The file int8cvasc.ec in the demo directory contains the following sample program.
/*
   * ifx_in8cvasc.ec *

    The following program converts three strings to INT8
    types and displays the values stored in each field of
    the INT8 structures.
*/

#include <stdio.h>

EXEC SQL include "int8.h";

char string1[] = "-12,555,444,333,786,456";
char string2[] = "480";
char string3[] = "5.2";
main()
{
    mint x;
    ifx_int8_t num1, num2, num3;
    void nullterm(char *, mint);

    printf("IFX_INT8CVASC Sample ESQL Program running.\n\n");

    if (x = ifx_int8cvasc(string1, strlen(string1), &num1))
        {
        printf("Error %d in converting string1 to INT8\n", x);
        exit(1);
        }
    if (x = ifx_int8cvasc(string2, strlen(string2), &num2))
        {
        printf("Error %d in converting string2 to INT8\n", x);
        exit(1);
        }
    if (x = ifx_int8cvasc(string3, strlen(string3), &num3))
        {
        printf("Error %d in converting string3 to INT8\n", x);
        exit(1);
        }

    /*  Display the exponent, sign value and number of digits in num1. */

    ifx_int8toasc(&num1, string1, sizeof(string1));
    nullterm(string1, sizeof(string1));
    printf("The value of the first INT8 is = %s\n", string1);

    /*  Display the exponent, sign value and number of digits in num2. */

    ifx_int8toasc(&num2, string2, sizeof(string2));
    nullterm(string2, sizeof(string2));
    printf("The value of the 2nd INT8 is = %s\n", string2);

    /*  Display the exponent, sign value and number of digits in num3. */
    /*  Note that the decimal is truncated */

    ifx_int8toasc(&num3, string3, sizeof(string3));
    nullterm(string3, sizeof(string3));
    printf("The value of the 3rd INT8 is = %s\n", string3);

    printf("\nIFX_INT8CVASC Sample Program over.\n\n");
    exit(0);
}
void nullterm(char *str, mint size)
{
    char *end;

    end = str + size;
    while(*str && *str > ' ' && str <= end)
        ++str;
    *str = '\0';
}

Output

IFX_INT8CVASC Sample ESQL Program running.

The value of the first INT8 is = -12555444333786456
The value of the 2nd INT8 is = 480
The value of the 3rd INT8 is = 5

IFX_INT8CVASC Sample Program over.