首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
任意二进制文件和十六进制相互转化工具
时间:
2015-08-05 17:40:38
阅读:
125
评论:
0
收藏:
0
[点我收藏+]
标签:
/*========================================================*/
/*
RainLeaf 文件转化工具 [版本 1.0]/n(C) 版权所有 2008-2009 R.L Studio.
功能:将一个文件转化为十六进制文件,或者将一个十六进制文件转化为二进制文件
条件:输入文件必须存在
方法:CONVERTFILE [-h | -f]
CONVERTFILE -h :将输入二进制文件转化为十六进制文件
CONVERTFILE -f :将输入十六进制文件转化为二进制文件
------------------------------------------------------------
Compiler:
Visual C++ 6.0
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char GetIndex(
char sour);
int HexToFile();
int FileToHex();
int IsHex(
char sour);
/*========================================================*/
/*
主函数
*/
int main(
int argc,
char **argv)
{
char ch[30];
if(argc < 2 || argc > 2)
{
printf(
"RainLeaf 文件转化工具 [版本 1.0]/n(C) 版权所有 2008-2009 R.L Studio./n/n");
printf(
"功能:将一个文件转化为十六进制文件,或者将一个十六进制文件转化为二进制文件/n");
printf(
"条件:输入文件必须存在/n");
printf(
"方法:CONVERTFILE [-h | -f]/n/n");
printf(
"CONVERTFILE -h :将输入二进制文件转化为十六进制文件/n");
printf(
"CONVERTFILE -f :将输入十六进制文件转化为二进制文件/n/n");
return 0;
}
strcpy(ch,argv[argc-1]);
switch (ch[1])
{
case
‘h‘:;
case
‘H‘:FileToHex();
break;
case
‘f‘:;
case
‘F‘:HexToFile();
break;
default:printf(
"输入参数错误,请直接输入命令查看帮助./n");
break;
}
return 0;
}
/*========================================================*/
/*
功能:二进制文件转化位十六进制文件
参数:无
返回:成功:0;失败:-1
*/
int FileToHex()
{
FILE *input;
FILE *output;
char infile[30],outfile[30];
unsigned
char temp;
char high,low;
printf(
"输入文件名:");
gets(infile);
printf(
"输出文件名:");
gets(outfile);
if((input = fopen(infile,
"rb")) == NULL || (output = fopen(outfile,
"w")) == NULL)
{
return -1;
}
temp = fgetc(input);
while(!feof(input))
{
low = temp & 0x0F;
high = temp >> 4;
fprintf(output,
"%x%x",high,low);
temp = fgetc(input);
}
printf(
"二进制文件%s成功转化位十六进制文件%s.",infile,outfile);
fclose(input);
fclose(output);
return 0;
}
/*========================================================*/
/*
功能:十六进制文件转化位二进制文件
参数:无
返回:成功:0;失败:-1
*/
int HexToFile()
{
FILE *input;
FILE *output;
FILE *Temp;
char infile[30],outfile[30];
unsigned
char temp;
unsigned
char high,low;
printf(
"输入文件名:");
gets(infile);
printf(
"输出文件名:");
gets(outfile);
if((input = fopen(infile,
"r")) == NULL || (Temp = fopen(
"$$",
"w")) == NULL)
{
return -1;
}
/* 过滤源十六进制文件 */
temp = fgetc(input);
while(!feof(input))
{
if(IsHex(temp))
{
fputc(temp,Temp);
temp = fgetc(input);
}
else
temp = fgetc(input);
}
fclose(input);
fclose(Temp);
if((input = fopen(
"$$",
"r")) == NULL || (output = fopen(outfile,
"wb")) == NULL)
{
return -1;
}
high = fgetc(input);
low = fgetc(input);
while(!feof(input))
{
high = GetIndex(high);
low = GetIndex(low);
if(high == -1 || low == -1)
return -1;
high = high << 4;
temp = high | low;
fputc(temp,output);
high = fgetc(input);
low = fgetc(input);
}
printf(
"十六进制文件%s成功转化位二进制文件%s.",infile,outfile);
fclose(input);
fclose(output);
/* 删除临时文件 */
remove(
"$$");
return 0;
}
/*========================================================*/
/*
功能:取得传入字符的索引值,也就是对应的二进制
参数:字符(0~f)
返回:成功:0~15;失败:-1
*/
char GetIndex(
char sour)
{
int i;
unsigned
char *hex =
"0123456789";
for(i = 0;i < strlen(hex);i++)
if(hex[i] == sour)
return i;
i = (sour ==
‘a‘||sour ==
‘A‘)?10:((sour ==
‘b‘||sour ==
‘B‘)?11:((sour ==
‘c‘||sour ==
‘C‘)?12:((sour ==
‘d‘||sour ==
‘D‘)?13:((sour ==
‘e‘||sour ==
‘E‘)?14:((sour ==
‘f‘||sour ==
‘F‘)?15:-1)))));
return i;
}
/*========================================================*/
/*
功能:判断字符是否是十六进制合法字符
参数:字符(0~f)
返回:成功:1~16;失败:0
*/
int IsHex(
char sour)
{
int i;
unsigned
char *hex =
"0123456789";
for(i = 0;i < strlen(hex);i++)
if(hex[i] == sour)
return i+1;
i = (sour ==
‘a‘||sour ==
‘A‘)?10:((sour ==
‘b‘||sour ==
‘B‘)?11:((sour ==
‘c‘||sour ==
‘C‘)?12:((sour ==
‘d‘||sour ==
‘D‘)?13:((sour ==
‘e‘||sour ==
‘E‘)?14:((sour ==
‘f‘||sour ==
‘F‘)?15:-1)))));
return (i+1);
}
任意二进制文件和十六进制相互转化工具
标签:
原文地址:http://www.cnblogs.com/qunxuan/p/4705007.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!