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

原创 2012年03月23日 02:02:22

 

欢迎指正不足

 

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


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言:将16进制字符串转化为int类型值

将16进制字符串值转换为 in
  • wl1524520
  • wl1524520
  • 2014年05月13日 14:09
  • 18824

string char* 16进制数字转化 unsigned char* 转化 字符串拼接

项目中用到了16进制数字的转化 , 但是输出的是通过sha1加密,字符是两两转化为16进制数,要求是将其连接起来发送成一个字符串。 首先 要用到string时需要加载相关的头文件 #inc...
  • harryptter
  • harryptter
  • 2015年01月07日 20:53
  • 2811

用C++实现ASCII码字符数组转16进制字符数组的功能

在网络通信中经常用到16进制和ASCII码字符数组互相转换的功能,虽然功能简单,但初学者写出来的代码经常会有各种问题。从ASCII码字符数组转为16进制字符数组,一个判断比较完整的实现代码如下: bo...
  • gzliudan
  • gzliudan
  • 2014年04月12日 08:54
  • 2901

Linux下C语言将字符串格式(char*)或char[]的MAC地址转换为十六进制数组

  • 2015年07月02日 15:38
  • 989B
  • 下载

C/C++关于字符串string、char*字符串数组与其他类型转换

C/C++关于字符串string、char*字符串数组与其他类型转换
  • FX677588
  • FX677588
  • 2016年10月01日 13:21
  • 641

C/C++ —— 十六进制类型字符串的转换

在实际工作中,字符串和其它数据类型的转换是很常见的,库函数有很多,比如 atoi , strtol , sscanf 等,这些函数网上有很多资料, 我经常用到的就是十六进制的数值以字符串的形式传输,...
  • jscese
  • jscese
  • 2014年09月04日 18:57
  • 4270

java中byte数组与十六进制字符串相互转换

java中byte数组与十六进制字符串相互转换。Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示。所以我们就可以把每个byte转换成两个相应的16进制字符,...
  • xmt1139057136
  • xmt1139057136
  • 2014年05月05日 17:21
  • 4296

java空格分隔的字符串表示的十六进制数转换为byte数组

java空格分隔的字符串表示的十六进制数转换为byte数组 用到这样的转换,搜索几个但还没有准备表达自己的需求.就自己花了点时间写了出来. 里面没有错误检查的.只是简单的功能的实现. /...
  • thanklife
  • thanklife
  • 2013年11月30日 12:20
  • 3534

C++ C int数字与string字符串的转换 string与char*转换 string与cstring转换

一、使用stringstream类c++的stringstream的速度较慢,需注意转换成的是string对象。// 将数字转为字符串 #include #Include string num2s...
  • qq_16234613
  • qq_16234613
  • 2017年08月08日 22:24
  • 364

在Java中如何把char数组转换为字符串

在Java中如何把char数组转换为字符串
  • u011998957
  • u011998957
  • 2015年06月18日 20:56
  • 3230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:十六进制字符串 char数组 转换 c c++ java
举报原因:
原因补充:

(最多只允许输入30个字)