您的位置:首页 > 编程语言 > C语言/C++

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

2013-07-24 15:59 615 查看
转载自: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();

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: