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

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

2014-06-15 23:05 537 查看

http://hi.baidu.com/wuruoyin/item/49c13b6c64fd132169105bbe

1.c版
[b]int hexcharToInt(char c)[/b]

{

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++版

[b]int hexCharToInt(char c)[/b]

{

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版

[b] public int hexCharToInt(char c) {[/b]

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

}

转载地址:http://qing.blog.sina.com.cn/1820422183/6c81702733001qvk.html?sudaref=www.sogou.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: