在 C++ 中将双精度数组值转换为字符值

Converting double array values to char values in C++

本文关键字:转换 字符 数组 双精度 C++      更新时间:2023-10-16

我有一个双精度矩阵数组,我需要将其存储到字符数组中。这些 32 位双精度值保证足够小,以适应 8 位字符值。(我的程序中的最大双精度值为 31(。我做了一些研究,我发现的是将双精度存储为 char* 的解决方案,换句话说,将双精度转换为c_string。这不是我想要实现的目标。

// I'm dealing with a 15*4 double array
double **d_array = new double*[15];
d_array[i] = new double[4];
// This creates a char array (That will have > 15*4 spaces)
unsigned char *c_array = new unsigned char [1024];

我可以在双精度矩阵上迭代一个循环以存储到字符矩阵中。假设我有d_array[1][0] = 4。我想有 c_array[5] = 4。因为4是00000100,所以它应该能够适应。

我认为您应该能够在循环中进行赋值,它将自动被截断和转换(您可能会收到编译器警告(:

c_array[0] = d_array[0][0];
To be safe, you could do
c_array[0] = (char)(int)d_array[0][0];

您可能希望使用uint8_t,因为char要么是有符号的,要么是无符号的,要么是char的。

您可以使用static_cast

uint8_t value = static_cast<uint8_t>(d_array[i][j]);

如果要浮点数的字节复制到缓冲区:

uint8_t buffer[4096];
float f_value = 3.14;
uint8_t * p_float = static_cast<uint8_t *>(&f_value);
for (unsigned int i = 0; i < sizeof(float); ++i)
{
  buffer[index + i] = p_float[i];
}