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) 的话,说明已经找完了,因此给出一个跳出死循环的条件
因为要不断地向数组中添加内容所以格式化两个数组的空间,可以不断的使用