想调优别人的代码,网上搜索一下Binary to Hexstring的转换,全是利用printf、scanf之类实现的,效率好低,还是自己想个简单的办法吧!

.......此处省略一万字.......

改进后的方法:

  1. int tohex(void* str, int strlen, char *ascii, int size)
  2. {
  3. if(strlen == || str== NULL || ascii==NULL)
  4. {
  5. if(NULL != ascii)
  6. ascii[]=0x00;
  7. return ;
  8. }
  9.  
  10. char* p1 = ascii;//new char[len*2+1];
  11. unsigned char* p2 = (unsigned char*)str;
  12. int i = , j = ;
  13. char dict[]={'','','','','','','','','','','A','B','C','D','E','F'};
  14. bool blCuted = false;
  15. for( i = ; i < strlen; ++i)
  16. {
  17. p1[j] = dict[ (p2[i] >> )];
  18. p1[j+] = dict[p2[i] & 0x0F];
  19. j+=;
  20.  
  21. if(j > size){
  22. blCuted = true;
  23. break;
  24. }
  25. }
  26. if(blCuted)
  27. j-= ;
  28. p1[j] =0x00;
  29. return j;
  30. }

改进前的方法(抄的):

  1. int BCD2ASC(const char *str, int strlen,char *ascii, int size)
  2. {
  3. int i = , p = , l = ;
  4. byte ch;
  5.  
  6. if(strlen == || str== NULL || ascii==NULL)
  7. return NULL;
  8.  
  9. bool blCuted = false;
  10. while(i<strlen)
  11. {
  12. ch = str[i++];
  13. l += ;
  14. if(l > size){
  15. blCuted = true;
  16. break;
  17. }
  18. p += sprintf(ascii+p, "%02X", ch);
  19. }
  20.  
  21. if(blCuted)
  22. l-= ;
  23. return l;
  24. }

测试代码:

  1. int main( )
  2. {
  3. int a=0x1234;
  4. int b=0xabcd;
  5. char *bistr="\x12\x34\x56\x78\x90\xab\xcd\xef\xe1\xf9\x1f\x1e\x00";
  6. char szTmp[*] = {};
  7. tohex(&a, sizeof(int), szTmp, sizeof(szTmp)); cout << szTmp << endl;
  8. tohex(&b, sizeof(int), szTmp, sizeof(szTmp)); cout << szTmp << endl;
  9. tohex(bistr, strlen(bistr), szTmp, sizeof(szTmp)); cout << szTmp << endl;
  10.  
  11. FILE* fp = fopen("D:\\testbinary.bi", "rb");
  12. char szBinary[*] = {};
  13. int ired = fread(szBinary, , *-, fp);
  14. cout << "readlen:" << ired <<endl;
  15.  
  16. DWORD dwB = GetTickCount();
  17. for(int i = ; i < ; ++i)
  18. {
  19. tohex(szBinary, ired, szTmp, sizeof(szTmp)-); //i=1w,<200ms
  20. cout << szTmp << endl;
  21. BCD2ASC(szBinary, ired, szTmp, sizeof(szTmp)-); //i=1w,9000ms
  22. cout << szTmp << endl;
  23. }
  24. DWORD dwE = GetTickCount();
  25.  
  26. cout << "cost:" << dwE-dwB << "ms" <<endl;
  27.  
  28. fclose(fp);
  29. return ;
  30. }

效率差的不是一条街,你可以try一下。

Binary转换成Hex字符串的更多相关文章

  1. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  2. DataTable转换成json字符串

    将DataTable里面的行转换成json字符串方法: #region DataTable转为json /// <summary> /// DataTable转为json /// < ...

  3. Newtonsoft.Json 把对象转换成json字符串

    var resultJson = new { records = rowCount, page = pageindex, //总页数=(总页数+页大小-1)/页大小 total = (rowCount ...

  4. Java将其他数据格式转换成json字符串格式

    package com.wangbo.util; import java.beans.IntrospectionException; import java.beans.Introspector; i ...

  5. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  6. PDF转换成二进制字符串写入 HTTP 输出流

    最近项目需要做电子签章,需要网页打开PDF签章后保存:正好复习哈二进制和流的转换: 文件转换成二进制字符串写入HTTP输出流 protected void Page_Load(object sende ...

  7. JSON对象转换成JSON字符串

    1.问题背景 有一个json对象,需要将其转换成json字符串 JSON.stringify(obj) 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  8. java 图片转换成base64字符串

    import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...

  9. JQuery将form表单值转换成json字符串函数

    由于后台接口限定,必须要将表单内容转换成json字符串提交,因此写了一个将form表单值转成json字符串的函数.     前提:页面引入了JQuery          下面直接上代码 一.代码 / ...

随机推荐

  1. 4--OC --合成存取器方法

    1. 从OC 2.0开始就已经可以自动生成设置函数方法和获取函数方法(统称为存取器方法). 什么是 @property 和 @synthesize ? @property 和 @synthesize ...

  2. angularjs三级联动

    <div ng-controller="AjaxCtrl"> <h1>AJAX - Oriented</h1> <div> Coun ...

  3. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  4. ERROR: No pool defined. at least one pool section must be specified in config file

    root@ubuntu:/opt/php7# /opt/php7/sbin/php-fpm [22-Sep-2015 14:29:00] WARNING: Nothing matches the in ...

  5. windows下,emacs的配置文件在哪儿?

    配置文件_Emacs在你的家目录下"C:/Documents and Settings/username/Application Data". 在Window 7下,配置文件目录在 ...

  6. C++Builder String 转 char* (转)

    源:http://blog.csdn.net/bannico/article/details/7577728 使用C++ Builder 处理字符串经常会遇到兼容性问题. 这次要将String 类型 ...

  7. Snuke's Subway Trip

    すぬけ君の地下鉄旅行 / Snuke's Subway Trip Time limit : 3sec / Memory limit : 256MB Score : 600 points Problem ...

  8. 生日蛋糕(DFS)

    题意: Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.   设从下往上数第i(1 <= i <= M)层蛋糕 ...

  9. Qt5:Qt程序不在任务拦显示图标

    setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); 回头再写

  10. 一个action读取另一个action里的session

    action 1: private Map session; session.put("projectname_session", request1.getParameter(&q ...