С ++: как конвертировать long double в char [12]? - PullRequest
1 голос
/ 14 апреля 2020

Дано long double. Мне нужно сериализовать его в char [12] (оптимально) и десериализовать. Это вообще возможно?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Из того, что я понимаю по вашему вопросу, я бы сделал:

double in=2.132;
char arr[12] = {};
memcpy(arr,&in,sizeof(in));

char arr2[12] = ...;
double out;
memcpy(&out,arr2,sizeof(out));

при условии, что порядковый номер и размер double одинаковы с обеих сторон де / сериализации.

0 голосов
/ 14 апреля 2020

Я бы посоветовал вам держаться подальше от memcpy, так как это может привести к перекрытию памяти, как указано ниже.

Ссылка http://www.cplusplus.com/reference/cstring/memcpy/

void * memcpy ( void * destination, const void * source, size_t num );
Copy block of memory

The function does not check for any terminating null character in source - 
it always copies exactly num bytes.

To avoid overflows, the size of the arrays pointed to by both the 
destination and source parameters, shall be at least num bytes, 
and should not overlap (for overlapping memory blocks, memmove is a safer approach).

Вы можете используйте другой подход, поскольку библиотека C, в частности, имеет функции для подобных требований, как показано ниже.

Полагаю, это то, чего вы хотите достичь.

int main(){

        long double var1 = 123.23;

        char str1[12];
        memset(str1, 0x00, sizeof(str1));

        sprintf(str1, "%-12.12Lf", var1);
        printf(" Value : %-12.12s\n", str1);


        long double var2 = 0;
        sscanf(str1, "%12Lf", &var2);
        printf(" Value : %Lf\n", var2); 

        return 0;

}

ПРИМЕЧАНИЕ. Здесь Вы также можете настроить точность.

...