С++:如何将long double转换为char [12]?

时间:2020-04-14 13:32:46

标签: c++ arrays char byte long-double

给出long double。我需要将其序列化为char [12](最佳)并反序列化。 甚至有可能吗?

2 个答案:

答案 0 :(得分:2)

根据我对您的问题的了解,我会这样做:

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

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

假设反​​序列化的两端的字节序和字节长相同。

答案 1 :(得分:-1)

我建议您远离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;

}

注意:您也可以在此处调整准确性。

相关问题