文件读取(读取图片)

bool    hexFile(const char* DestFile, const char* SrcFile)
{
    FILE* fpRead = fopen(SrcFile, "r+b");//定义句柄
    FILE* fpWrite = fopen(DestFile, "w+b");

    if (NULL == fpRead || NULL == fpWrite)//判断指向我文件位置不为空
    {
        printf("打开文件失败!\n");
        return false;
    }

    const int LINE_LEN = 16;//定义一个常量
    unsigned char szLine[16] = {};//开辟一个数组空间
    char szHex[4] = {};//每个字符串需要3个字节的空间

    for (;;)
    {
        int len = fread(szLine, 1, LINE_LEN, fpRead);//读szLine中的数量
        for (int ix = 0; ix < len; ++ix)
        {
            sprintf(szHex, "%02X ", szLine[ix]);//开始赋值给szHex中
            fwrite(szHex, 1, 3, fpWrite);//写入所指向文件中
        }
        for (int iy = 0; iy < (LINE_LEN - len); ++iy)//小于szLine数量的空格
        {
            fwrite("   ", 1, 3, fpWrite);
        }           
        fwrite("|", 1, 1, fpWrite);//写入"|"
        fwrite(szLine, 1, len, fpWrite);//写入原始的内容
        fwrite("\r\n", 1, 2, fpWrite);//换行

        if (LINE_LEN > len)//如果16大于szLine中数量时说明已经打印完了
        {
            break;
        }           
        memset(szHex, 0, sizeof(szHex));//格式化数组空间
        memset(szLine, 0, sizeof(szLine));//格式化数组空间
    }
    return true;
}

int main()
{
    const char szDst[] = "C:\\Users\\mbdn\\Desktop\\faa.txt";
    const char szSrc[] = "C:\\Users\\mbdn\\Desktop\\normal.png";
    hexFile(szDst, szSrc);
    getchar();
    return 0;
}

首先定义两个句柄,因为要在文件之间传东西,然后判断两个文件是否存在
然后一次打印16个字节的内容,循环16次,不断的将数组szLine的值转化为无符的szHex中
每个”%02X “需要3个字节
for (int iy = 0; iy < (LINE_LEN - len); ++iy)//小于szLine数量的空格
{
fwrite(” “, 1, 3, fpWrite);
}
开始的是候 (LINE_LEN - len)是一直等于0的;所以iy是一直不进的,当最后len不满16的时候,打印 16 - len 个空格;
写入一个”|” 写入原文件内容
写入换行”\r\n”(一般的换行是”\n”,没效果的话可以用”\r\n”)
通过上面的判断后如果(LINE_LEN > len) 的话,说明已经找完了,因此给出一个跳出死循环的条件
因为要不断地向数组中添加内容所以格式化两个数组的空间,可以不断的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值