我有一个双打矩阵数组,我需要存储到一个字符数组中。这些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,它应该能够适合。
答案 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];
}