在C ++中将双数组值转换为char值

时间:2018-02-03 21:46:05

标签: c++ char type-conversion double

我有一个双打矩阵数组,我需要存储到一个字符数组中。这些32位双精度值保证足够小,以适应8位char值。 (我程序中的最大双精度值是31)。我研究了一下,我发现的是将double存储为char *的解决方案,换句话说,将double转换为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,它应该能够适合。

2 个答案:

答案 0 :(得分:0)

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

c_array[0] = d_array[0][0];

To be safe, you could do

c_array[0] = (char)(int)d_array[0][0];

答案 1 :(得分: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];
}