任意二进制文件和十六进制相互转化工具

  1. /*========================================================*/
  2. /*
  3. RainLeaf 文件转化工具 [版本 1.0]/n(C) 版权所有 2008-2009 R.L Studio.
  4. 功能:将一个文件转化为十六进制文件,或者将一个十六进制文件转化为二进制文件
  5. 条件:输入文件必须存在
  6. 方法:CONVERTFILE [-h | -f]
  7. CONVERTFILE -h :将输入二进制文件转化为十六进制文件
  8. CONVERTFILE -f :将输入十六进制文件转化为二进制文件
  9. ------------------------------------------------------------
  10. Compiler:
  11. Visual C++ 6.0
  12. */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. char GetIndex(char sour);
  17. int HexToFile();
  18. int FileToHex();
  19. int IsHex(char sour);
  20. /*========================================================*/
  21. /*
  22. 主函数
  23. */
  24. int main(int argc,char **argv)
  25. {
  26. char ch[30];
  27. if(argc < 2 || argc > 2)
  28. {
  29. printf("RainLeaf 文件转化工具 [版本 1.0]/n(C) 版权所有 2008-2009 R.L Studio./n/n");
  30. printf("功能:将一个文件转化为十六进制文件,或者将一个十六进制文件转化为二进制文件/n");
  31. printf("条件:输入文件必须存在/n");
  32. printf("方法:CONVERTFILE [-h | -f]/n/n");
  33. printf("CONVERTFILE -h :将输入二进制文件转化为十六进制文件/n");
  34. printf("CONVERTFILE -f :将输入十六进制文件转化为二进制文件/n/n");
  35. return 0;
  36. }
  37. strcpy(ch,argv[argc-1]);
  38. switch (ch[1])
  39. {
  40. case ‘h‘:;
  41. case ‘H‘:FileToHex();break;
  42. case ‘f‘:;
  43. case ‘F‘:HexToFile();break;
  44. default:printf("输入参数错误,请直接输入命令查看帮助./n");break;
  45. }
  46. return 0;
  47. }
  48. /*========================================================*/
  49. /*
  50. 功能:二进制文件转化位十六进制文件
  51. 参数:无
  52. 返回:成功:0;失败:-1
  53. */
  54. int FileToHex()
  55. {
  56. FILE *input;
  57. FILE *output;
  58. char infile[30],outfile[30];
  59. unsigned char temp;
  60. char high,low;
  61. printf("输入文件名:");
  62. gets(infile);
  63. printf("输出文件名:");
  64. gets(outfile);
  65. if((input = fopen(infile,"rb")) == NULL || (output = fopen(outfile,"w")) == NULL)
  66. {
  67. return -1;
  68. }
  69. temp = fgetc(input);
  70. while(!feof(input))
  71. {
  72. low = temp & 0x0F;
  73. high = temp >> 4;
  74. fprintf(output,"%x%x",high,low);
  75. temp = fgetc(input);
  76. }
  77. printf("二进制文件%s成功转化位十六进制文件%s.",infile,outfile);
  78. fclose(input);
  79. fclose(output);
  80. return 0;
  81. }
  82. /*========================================================*/
  83. /*
  84. 功能:十六进制文件转化位二进制文件
  85. 参数:无
  86. 返回:成功:0;失败:-1
  87. */
  88. int HexToFile()
  89. {
  90. FILE *input;
  91. FILE *output;
  92. FILE *Temp;
  93. char infile[30],outfile[30];
  94. unsigned char temp;
  95. unsigned char high,low;
  96. printf("输入文件名:");
  97. gets(infile);
  98. printf("输出文件名:");
  99. gets(outfile);
  100. if((input = fopen(infile,"r")) == NULL || (Temp = fopen("$$","w")) == NULL)
  101. {
  102. return -1;
  103. }
  104. /* 过滤源十六进制文件 */
  105. temp = fgetc(input);
  106. while(!feof(input))
  107. {
  108. if(IsHex(temp))
  109. {
  110. fputc(temp,Temp);
  111. temp = fgetc(input);
  112. }
  113. else
  114. temp = fgetc(input);
  115. }
  116. fclose(input);
  117. fclose(Temp);
  118. if((input = fopen("$$","r")) == NULL || (output = fopen(outfile,"wb")) == NULL)
  119. {
  120. return -1;
  121. }
  122. high = fgetc(input);
  123. low = fgetc(input);
  124. while(!feof(input))
  125. {
  126. high = GetIndex(high);
  127. low = GetIndex(low);
  128. if(high == -1 || low == -1)
  129. return -1;
  130. high = high << 4;
  131. temp = high | low;
  132. fputc(temp,output);
  133. high = fgetc(input);
  134. low = fgetc(input);
  135. }
  136. printf("十六进制文件%s成功转化位二进制文件%s.",infile,outfile);
  137. fclose(input);
  138. fclose(output);
  139. /* 删除临时文件 */
  140. remove("$$");
  141. return 0;
  142. }
  143. /*========================================================*/
  144. /*
  145. 功能:取得传入字符的索引值,也就是对应的二进制
  146. 参数:字符(0~f)
  147. 返回:成功:0~15;失败:-1
  148. */
  149. char GetIndex(char sour)
  150. {
  151. int i;
  152. unsigned char *hex = "0123456789";
  153. for(i = 0;i < strlen(hex);i++)
  154. if(hex[i] == sour)
  155. return i;
  156. 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)))));
  157. return i;
  158. }
  159. /*========================================================*/
  160. /*
  161. 功能:判断字符是否是十六进制合法字符
  162. 参数:字符(0~f)
  163. 返回:成功:1~16;失败:0
  164. */
  165. int IsHex(char sour)
  166. {
  167. int i;
  168. unsigned char *hex = "0123456789";
  169. for(i = 0;i < strlen(hex);i++)
  170. if(hex[i] == sour)
  171. return i+1;
  172. 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)))));
  173. return (i+1);
  174. }
时间: 2024-11-05 18:32:22

任意二进制文件和十六进制相互转化工具的相关文章

【C语言】 任意十进制数字转十六进制

大概思路:输入任意十进制数字 首先确定位数: 使用整形数组来存储十六进制数: a[0] 表示十六进制数字的位数: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 int* ahex(int dec){ int n=1; int m=16; int *a; a = (int*)malloc(sizeof(int)*MAXSIZE+1); while(dec >= m) { m = m*16; n++; } //

DataTable转任意类型对象List数组-----工具通用类(利用反射和泛型)

public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToList(DataTable dt) { //

驼峰字符串与下划线字符串之间相互转化工具

博客主页:http://blog.csdn.net/minna_d 起因: 我们经常会有驼峰字符串与下划线字符串相互转化的需求, 而且这个还不好之间用正则替换. 比如:db 表中命名风格通常为下划线风格, web应用pojo中通常有时驼峰风格. 如果字段太多,总觉得很麻烦 实现: cm2us.py: #!/bin/python import re import sys def camelToUnderlines(x):     return re.sub('_([a-z])', lambda m

如何在SharePoint 当中使用纯JSOM上传任意二进制文件(小于2MB)

在微软的官方网站上有关于如何在SharePoint当中使用JS创建一个简单的文本文件的例子,经过我的思考我觉得结合Html5特性的浏览器,是完全可以通过JS来读取到文件的内容的(这一部分的内容请大家自行去了解),进而可以实现一个纯的JS的文件上传的例子,经过我的不断的实践,终于可以实现纯JS的文件上传了,当然还是参考了如下的文章. 限制有2个: 1.文件不能太大1.5MB以内完全是没有问题,这是JSOM的限制,没有办法突破. 2.浏览器必须是完全支持HTML5的,Chrome完全可以,IE必须1

Android中Bitmap,byte[],Drawable,InputStream相互转化工具类

在新浪看到一些数据流的转化,分享一下: 1.将byte[]转换成InputStream   public InputStream Byte2InputStream(byte[] b) { ByteArrayInputStream bais = new ByteArrayInputStream(b); return bais; } 2. 将InputStream转换成byte[]   两种方式: 一. public static final byte[] InputStream2Bytes(Inp

文本文件与二进制文件的定义

网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散.下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件. 一.文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的.这两者只是在编码层次上有差异. 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等.二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编

常见的比较二进制工具有哪些

二进制是计算技术中广泛采用的一种数制,用0和1两个数码来表示的数.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的. 如果两份二进制文件存在差异,肉眼是很难快速并且地准确查找出差异部分的,那么这就要借助二进制比较工具来完成任务.现在各大网络平台上流传着许多比较二进制的软件,今天小编就给大家推荐几款好用的二进制比较软件. Beyond Compare Beyond Compare是一款专业级文件对比工具,使用它可以很方便地对比出两个文件夹或者文件的不同之处.软件内置

优雅得使用composer来安装各种PHP小工具

Composer对php世界的影响是巨大的,使用composer来代替PEAR一定是大势所趋.当小伙伴们都还沉浸在composer带来的便利的时候,有没有想过如何更好的使用composer呢,网上大部分教的直接下载composer然后在当前目录直接运行的方法是不是略感屌丝呢.没错,这么好用的工具怎么着也得放在/usr/bin里边吧,但我更倾向于另外一种方式. 首先还是常规的下载composer.phar到随便什么目录.比如就home吧 $ curl -sS https://getcomposer

火狐开发----Web开发者工具

作为开发Web相关人员,有必要了解这个开发工具,会提供给你不少的帮助,进入正题.经典的F12启动,这个大家都知道. 一 控制台可以很好的帮我们掌控错误,包括文件的加载.JS语法.CSS语法.安全问题. 点击选中即可显示,否则隐藏,当然很多许多错误,需要打开控制台重新刷新加载才能看到,比较常见的网络工具需要重新加载才能看见. 这里提供一个过滤工具,比如我们查找文件加载异常的404错误. 二 查看器 查看器可以编辑复制粘贴HTML,但是查找的时候只能查找HTML元素非任意字符. 右侧的工具不说了,大