С++:如何将 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));
假设 double 的字节顺序和大小在 de/serialization 的两边相同。
我建议您远离 memcpy,因为它可能会导致内存重叠,如下所述。
Link 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;
}
注意:您也可以在此处调整准确性。
给定 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));
假设 double 的字节顺序和大小在 de/serialization 的两边相同。
我建议您远离 memcpy,因为它可能会导致内存重叠,如下所述。
Link 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;
}
注意:您也可以在此处调整准确性。