c代碼寫數據到二進制的bin文件中


需要將數據寫入到bin文件中,打開該文件是一堆亂碼,增加數據的保密性

 

例如:要寫入的數據為一個字符串,加上若干個int型整數

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    char names[100] = "KobeBryant";
    int iValue[14] = { 84, 15, 157, 103, 112, 48, 142, 52, 128, 64, 108, 76, 136, 80 };
    
    /* 新建一個bin文件 */
    FILE *fw = fopen("1.bin", "wb");
    if (fw == NULL)
        return 0;

    /* 寫入imgname,並加上一個空格 */
    for (int i = 0; i < strlen(names); i++)
        fwrite(names + i, sizeof(char), 1, fw);
    char space = 32;
    fwrite(&space, sizeof(char), 1, fw);

    /* 將數值寫入到bin文件中 */
    int length = sizeof(iValue) / sizeof(int);
    for (int i = 0; i < length; i++)
    {
        fwrite(iValue+i, sizeof(int), 1, fw);
    }

    fclose(fw);
    return 1;
}

寫入的結果:

 

讀入bin文件的代碼:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    /* 創建文件指針,以只讀+二進制的方式打開文件 */
    FILE *fr = fopen("1.bin", "rb");

    /* 判斷打開文件是否成功 */
    if (fr == NULL)
    {
        printf("Message : %s\n", strerror(errno));
        return -1;
    }
    /* 輸出img的圖片名稱,加上一個換行符 */
    char c_name;
    int rc = -1;
    rc = fread(&c_name, 1, sizeof(char), fr);
    while (c_name!=32)
    {
        cout << c_name;
        rc = fread(&c_name, 1, sizeof(char), fr);
    }
    printf("%c", 10);

    /* 讀入每個int型數據后,並輸出 */
    int data = -1;
    int n = 0;
    rc = fread(&data, sizeof(int), 1, fr);
    while (rc)
    {
        n += rc;
        printf("%-5d", data);
        rc = fread(&data, sizeof(int), 1, fr);
    }

    /* 關閉文件 */
    fclose(fr);
    system("pause");
    return 0;
}
讀該bin文件的結果:
rc = fread(&c_name, 1, sizeof(char), fr)函數,每次讀入一個字符,返回值為讀入成功的字符個數,讀入成功,rc=1,讀入失敗,rc=-1;
直到讀入空格時,字符串的讀入停止。
每次讀入一個字符時,文件指針fr都會向后挪動一位。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM