转载自:http://qing.blog.sina.com.cn/1820422183/6c81702733001qvk.html

1.c版

int hexcharToInt(char c)
        if (c >= '0' && c <= '9') return (c - '0');
        if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
        if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
   return 0;
}

void hexstringToBytes(char* hexstring,char* bytes,int hexlength)
{         
   cout<<"length is :"<<sizeof(hexstring)/sizeof(char)<<endl;
        for (int i=0 ; i <hexlength ; i+=2) {
            bytes[i/2] = (char) ((hexcharToInt(hexstring[i]) << 4)
                                | hexcharToInt(hexstring[i+1]));
        }
}

void bytesToHexstring(char* bytes,int bytelength,char *hexstring,int hexstrlength)
{
   char str2[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
   for (int i=0,j=0;i<bytelength,j<hexstrlength;i++,j++) 
   {
            int b;
            b = 0x0f&(bytes[i]>>4);
            char s1 = str2[b];
       hexstring[j] = s1;    
            b = 0x0f & bytes[i];
       char s2 = str2[b];
j++;
            hexstring[j] = s2;    
   }
}

int main()
{
   char csh[5] = {'1','2','3','4','\0'};
   cout<<"csh length is :"<<strlen(csh)<<endl;
   char ch[4] = {'1','2','3','4'};
   char str1[8];
   bytesToHexstring(ch,4,str1,8);
   for(int k=0;k<8;k++)
   printf("hex:%x\n",str1[k]);
   char bte[4] ; 
   hexstringToBytes(str1,bte,8);
   for(int m=0;m<4;m++)
   printf("bytes:%x\n",bte[m]);
   return 1;
}

2.c++版
int hexCharToInt(char c)
        if (c >= '0' && c <= '9') return (c - '0');
        if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
        if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
return 0;
}

char* hexstringToBytes(string s)
{         
        int sz = s.length();
        char *ret = new char[sz/2];
        for (int i=0 ; i <sz ; i+=2) {
            ret[i/2] = (char) ((hexCharToInt(s.at(i)) << 4)
                                | hexCharToInt(s.at(i+1)));
        }
return ret;
}

string bytestohexstring(char* bytes,int bytelength)
{
  string str("");
  string str2("0123456789abcdef"); 
   for (int i=0;i<bytelength;i++) {
     int b;
     b = 0x0f&(bytes[i]>>4);
char s1 = str2.at(b);
str.append(1,str2.at(b));    
     b = 0x0f & bytes[i];
     str.append(1,str2.at(b));
char s2 = str2.at(b);
   }
   return str;
}

int main()
{
   
   char ch[5] ={'1','2','3','4','5'};
   string str = bytestohexstring(ch,5);
   char *chs =new char[5];
   strcpy(chs,str.c_str());
   cout<<endl;
   cout<<str<<endl;
   for(int i = 0;i<10;i++)
   {
      printf("\n%x",chs[i]);
   }
   cout<<endl;
   char* sdf = hexstringToBytes(str);
    for(int j = 0;j<5;j++)
   {
      printf("\n%x",sdf[j]);
   }
   return 1;
}

3.java版
  public int hexCharToInt(char c) {
        if (c >= '0' && c <= '9') return (c - '0');
        if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
        if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
        throw new RuntimeException ("invalid hex char '" + c + "'");
    }

    public byte[]
    hexStringToBytes(String s) {
        byte[] ret;
        if (s == null) return null;
        int sz = s.length();
        ret = new byte[sz/2];
        for (int i=0 ; i <sz ; i+=2) {
            ret[i/2] = (byte) ((hexCharToInt(s.charAt(i)) << 4)
                                | hexCharToInt(s.charAt(i+1)));
        }
        return ret;
    }

    public String
    bytesToHexString(byte[] bytes) {
        if (bytes == null) return null;
        StringBuilder ret = new StringBuilder(2*bytes.length);
        for (int i = 0 ; i < bytes.length ; i++) {
            int b;
            b = 0x0f & (bytes[i] >> 4);
            ret.append("0123456789abcdef".charAt(b));
            b = 0x0f & bytes[i];
            ret.append("0123456789abcdef".charAt(b));
        }
        return ret.toString();
    }

十六进制字符串 char 数组 转换 c/c++/java的更多相关文章

  1. 将16进制unsigned char数组转换成整数

    /** * 将unsigned char数组转换成long long数值 * {0x00 0x00 0x20 0x00}转换之后得到8192 * * @param str 数组 * @param le ...

  2. javascript字符串与数组转换汇总

    本文给大家分享的是Js中字符串转换成数组,数组转换成字符串的函数,十分的简单实用,有需要的小伙伴可以参考下. 数组转字符串 1.join()方法 ? 1 2 3 4 var s= ["a&q ...

  3. QString 和char数组转换(转)

    在qt开发过程中经常遇到QString类和char数组进行转换,在此记录一下: QString->char数组 1 2 3 QString str="12fff"; QByt ...

  4. string子串匹配(用string自带函数,不涉及char数组转换)

    using namespace std; #include <iostream> #include<string> //第1种,用string自带的s.subdtr()截取任意 ...

  5. C#字符串与char数组互转!

    字符串转换成Char数组string str="abcdefghijklmnopqretuvwxyz";char[] chars=str.ToCharArray(); char数组 ...

  6. Java 基础类型转换byte数组, byte数组转换基础类型

    Java 基础类型转换byte数组, byte数组转换基础类型 Java类型转换 java类对象转化为byte数组

  7. python 字节数组和十六进制字符串互转

    . 字节数组 --> 十六进制字符串 >>> a = 'ab' >>> a.encode('hex') ' . 十六进制字符串 --> 字节数组 > ...

  8. delphi char数组、string和Pchar的相互转换

    因为要调用windows的api或者给vc++写接口,很多地方都要用到pchar,现在将char数组.string和pchar之间的相互转换都列出来,都是网上找的资料,我总结一下,先直接上代码,再讲原 ...

  9. Java byte和hex十六进制字符串转换

    在Java中字符串由字符char组成, 一个char由两个byte组成, 而一个byte由八个bit组成, 一个十六进制字符(0-F)实际上由4个字节byte即可表达, 因此, 从字节数组到十六进制字 ...

随机推荐

  1. [Functional Programming] Combine Multiple State ADT Instances with the Same Input (converge(liftA2(constant)))

    When combining multiple State ADT instances that depend on the same input, using chain can become qu ...

  2. autoconfig.xml与antx.properties一级application.properties之间的关系

    Java web项目中一般都有配置文件,文件中包含一些配置信息供Java工程启动和运行时使用,这些常见的配置文件大都是一些以.properties后缀的文件,比如常见的antx.properties以 ...

  3. jQuery编程小结

    加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址. <script t ...

  4. Web学习篇之---css基础知识(一)

    css基础知识(一) 1.css样式: 载入css样式有下面四种: 1).外部样式 2).内部样式 3).行内样式 4).导入样式 <link href="layout.css&quo ...

  5. 应用程序池和应用程序域的区别(Difference between application pool and application domain)

    来自StackOverFlow:  http://stackoverflow.com/questions/8486335/difference-between-an-application-domai ...

  6. mysql Connector C++ 操作数据库 vs2012

    最近想写一个应用程序,要连接和操作mysql数据库,以前只是用c++ builder 操作过mysql数据库,那是用控件操作的,感觉比较弱智,但是c++ builder vcl控件感觉在多线程里比较坑 ...

  7. win10 rabbitMQ的安装与测试

    安装 1.首先,下载并运行Erlang for Windows 安装程序 (地址:http://www.erlang.org/downloads)下载完毕并安装(注意:安装目录请选择默认目录) 2.下 ...

  8. Linux内核设计基础(五)之内存管理

    我感觉学习操作系统首先要从内存分配和管理入手. 首先我们应该知道现代操作系统是以页为单位进行内存管理的,32位体系结构支持4KB的页.而64位体系结构支持8KB的页.页是用来分配的.怎样才干进行高效和 ...

  9. 怎样设置mysql的表不区分你大写和小写

    Linux上安装MySQL默认是数据库的表大写和小写敏感的.改动非常easy.仅仅要该一个mysql的配置文件就能够了. mysql> show tables; +--------------- ...

  10. 组播和广播的概念,IGMP的用途

    1.组播和广播的概念 1) 组播 主机之间的通讯模式,也就是加入了同一个组的主机可以接收到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据. 主机可以向路由器请求加入或退出某个 ...