繁体   English   中英

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

[英]How to convert long double to char[12]?

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

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

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

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

假设在反序列化的两侧,双精度和大小是相同的。

我建议您远离 memcpy,因为它可能导致 memory 重叠,如下所述。

链接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;

}

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

std::to_string(long_double).c_str() // 保存到 char[12]?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM