十六进制字符串 char数组 转换 c c++ java

来源:互联网 发布:tomcat发布java项目 编辑:程序博客网 时间:2024/06/11 09:26

 

欢迎指正不足

 

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();    }


 

原创粉丝点击