是否有可能将double数组转换为char *?

时间:2012-10-22 20:35:59

标签: c++ c casting

我正在编写一个程序,它必须创建一个文件,将其映射到内存,然后写入二维的双精度数组。当我查看文件时遇到问题。它充满了不期望的价值。我想,这个问题与铸造有关,但无法提出解决方案。那么,问题是,如何将双精度数组转换为char *?希望有人能给我一个解决这个问题的线索。

int main(int argc, char **argv)
{
    HANDLE plik, mappedFile;
    char  *poi;
    LPCWSTR fileName = L"plik.txt";
    double tab[8][12];
    createMatrix(tab); // here I fill the array with values

    // creating file
     // mapping the file

   poi = (char *)MapViewOfFile(
    mappedFile,
    FILE_MAP_ALL_ACCESS,
    0,
    0,
    0);

if (!poi)
{
    puts("Can't allocate Memory!");
    abort();
}

memcpy(poi,tab,96*sizeof(double));

UnmapViewOfFile((void*)poi);
CloseHandle(mappedFile);
CloseHandle(plik);
getchar();
return 0;
}

3 个答案:

答案 0 :(得分:2)

我认为你的代码正在运行,该文件包含双数字,但请记住它是一种浮点格式的二进制格式,因此文本编辑器只会将其显示为一些垃圾。尝试十六进制编辑器,并检查双重格式。或者尝试阅读它。

您的方法存在的主要问题是它不是跨平台的,具有不同endianness的计算机无法正确读取它(这对您来说可能是也可能不是问题)。

你想要的是serialization。最简单的版本只是打印文件中的数字(具有一些用户定义的有限精度) - 例如与sprintf ..

答案 1 :(得分:0)

你在寻找这样的东西:

char* poi = new char[8*12*sizeof(double)];
int index = 0;

for(int i = 0; i < 8; i++)
{
    for(int j = 0; j < 12; j++)
    {
        *(double*)(poi + index) = tab[i][j];
        index+=sizeof(double);
    }
}

答案 2 :(得分:0)

我建议你用简单的WriteFile函数替换文件映射。它对许多应用来说可能更快。

WriteFile(plic, tab, sizeof(tab), 0, 0);

将准确,快速地序列化您的数据。