十六进制字符串、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
相关文章推荐
- 十六进制字符串 char 数组 转换 c/c++/java
- 十六进制字符串 char 数组 转换 c/c++/java
- 十六进制字符串 char数组 转换 c c++ java
- 十六进制字符串 char 数组 转换 c/c++
- Java中char数组与字符串String类型的转换
- Java中char数组(字符数组)与字符串String类型的转换方法
- Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- Java中char数组(字符数组)与字符串String类型的转换方法
- 将一个十六进制字符串转换为十进制数值的问题|| 以及C++中string转换成char*|| c++文件按行输入
- 使用Java完成byte数组与十六进制字符串相互转换
- 主题:Java整数-字节,字节-字符,字节数组-十六进制字符串转换
- Java 字节数组与十六进制表示的字符串,互相转换
- 【C++ / Java】char数组和string的相互转换及自动转换
- char*数组(c类型字符串)和c++中的string的转换、字符串比较、char*数组等问题
- Java中char数组(字符数组)与字符串String类型的转换方法
- java中字符串String与数组char[]的转换
- char*数组(c类型字符串)和c++中的string的转换、字符串比较、char*数组等问题
- C/C++关于字符串string、char*字符串数组与其他类型转换
- java 中字节数组与十六进制字符串及普通字符串之间的转换
- 在Java中如何把char数组转换为字符串