簡體   English   中英

是否有可能將double數組轉換為char *?

[英]Is there a possibility to convert array of double to char *?

我正在編寫一個程序,它必須創建一個文件,將其映射到內存,然后寫入二維的雙精度數組。 當我查看文件時遇到問題。 它充滿了不期望的價值。 我想,這個問題與鑄造有關,但無法提出解決方案。 那么,問題是,如何將雙精度數組轉換為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;
}

我認為你的代碼工作正常,文件中包含雙數字,但請記住它是一種浮點格式的二進制格式,因此文本編輯器只會將其顯示為一些垃圾。 嘗試十六進制編輯器,並檢查雙重格式。 或者嘗試閱讀它。

你的方法的主要問題是它不是跨平台的,具有不同字節序的機器將無法正確讀取它(這對你來說可能是也可能不是問題)。

你想要的是序列化 最簡單的版本只會打印文件中的數字(用戶定義的有限精度) - 例如使用sprintf ..

你在尋找這樣的東西:

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);
    }
}

我建議你用簡單的WriteFile函數替換文件映射。 它對許多應用程序來說可能更快。

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

將准確,快速地序列化您的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM