Rocho.J

人脑是不可靠的, 随时记录感悟并且经常重复!

 

[转] byte[]数组与十六进制字符串与字符串的互相转换

byte[]数组与十六进制字符串与字符串的互相转换  

2010-01-20 14:37:33|  分类: Java |  标签: |字号 订阅

 
 

字符串转换成十六进制字符串方法1:

  /**
     * 字符串转换成十六进制字符串
     */ 
    public static String str2HexStr(String str) { 
        char[] chars = "0123456789ABCDEF".toCharArray(); 
        StringBuilder sb = new StringBuilder("");
        byte[] bs = str.getBytes(); 
        int bit; 
        for (int i = 0; i < bs.length; i++) { 
            bit = (bs[i] & 0x0f0) >> 4; 
            sb.append(chars[bit]); 
            bit = bs[i] & 0x0f; 
            sb.append(chars[bit]); 
        } 
        return sb.toString(); 
    } 

 

十六进制字符串转换成为数组方法1:

 /**
   * 把16进制字符串转换成字节数组
   * @param hexString
   * @return byte[]
   */
  public static byte[] hexStringToByte(String hex) {
   int len = (hex.length() / 2);
   byte[] result = new byte[len];
   char[] achar = hex.toCharArray();
   for (int i = 0; i < len; i++) {
    int pos = i * 2;
    result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
   }
   return result;
  }
 
 private static int toByte(char c) {
    byte b = (byte) "0123456789ABCDEF".indexOf(c);
    return b;
 }

数组转换成十六进制字符串方法1:

 /**
  * 数组转换成十六进制字符串
  * @param byte[]
  * @return HexString
  */
 public static final String bytesToHexString(byte[] bArray) {
  StringBuffer sb = new StringBuffer(bArray.length);
  String sTemp;
  for (int i = 0; i < bArray.length; i++) {
   sTemp = Integer.toHexString(0xFF & bArray[i]);
   if (sTemp.length() < 2)
    sb.append(0);
   sb.append(sTemp.toUpperCase());
  }
  return sb.toString();
 }

byte[]数组转换成十六进制字符串方法2:

    /**
     * 数组转成十六进制字符串
     * @param byte[]
     * @return HexString
     */
    public static String toHexString1(byte[] b){
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < b.length; ++i){
            buffer.append(toHexString1(b[i]));
        }
        return buffer.toString();
    }
    public static String toHexString1(byte b){
        String s = Integer.toHexString(b & 0xFF);
        if (s.length() == 1){
            return "0" + s;
        }else{
            return s;
        }
    }

十六进制字符串转换字符串方法1:

 /**
  * 十六进制字符串转换成字符串
  * @param hexString
  * @return String
  */
    public static String hexStr2Str(String hexStr) { 

        String str = "0123456789ABCDEF"; 
        char[] hexs = hexStr.toCharArray(); 
        byte[] bytes = new byte[hexStr.length() / 2]; 
        int n; 
        for (int i = 0; i < bytes.length; i++) { 
            n = str.indexOf(hexs[2 * i]) * 16; 
            n += str.indexOf(hexs[2 * i + 1]); 
            bytes[i] = (byte) (n & 0xff); 
        } 
        return new String(bytes); 
    }

 

十六进制字符串转换字符串方法2:

    /**
     * 十六进制字符串转换字符串
     * @param HexString
     * @return String
     */
 public static String toStringHex(String s) {
  byte[] baKeyword = new byte[s.length() / 2];
  for (int i = 0; i < baKeyword.length; i++) {
   try {
    baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
      i * 2, i * 2 + 2), 16));
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  try {
   s = new String(baKeyword, "utf-8");// UTF-16le:Not
  } catch (Exception e1) {
   e1.printStackTrace();
  }
  return s;
 }

 ===============================

 

c#中如何将十进制数的字符串转化成十六进制数的字符串

// <summary>

        /// 把ã?字Á?符¤?串ä?转Áa换?成¨¦16进?制?

        /// </summary>

        /// <param name="str"></param>

        /// <param name="enc"></param>

        /// <returns></returns>

        private string StringToHex(string str, Encoding enc)

        {

            byte[] bytes = enc.GetBytes(str);

            string result = string.Empty;

            for (int i = 0; i < bytes.Length; i++)

            {

                result += "%" + Convert.ToString(bytes[i], 16);

            }

            return result;

        }

        /// <summary>

        /// 把ã?字Á?符¤?串ä?转Áa换?成¨¦16进?制?字Á?节¨²数ºy组Á¨¦

        /// </summary>

        /// <param name="str"></param>

        /// <returns></returns>

        private byte[] StringToHexbyte(string str)

        {

            str = str.Replace(" ", "");

            if ((str.Length % 2) != 0)

                str += "";

            byte[] bytes = new byte[str.Length / 2];

            for (int i = 0; i < bytes.Length; i++)

            {

                bytes[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);

            }

            return bytes;

        }

        /// <summary>

        /// 将?字Á?节¨²数ºy组Á¨¦转Áa换?成¨¦16进?制?字Á?符¤?串ä?

        /// </summary>

        /// <param name="bytes"></param>

        /// <returns></returns>

        private string ByteToHexString(byte[] bytes)

        {

            string str = string.Empty;

            if (bytes != null)

            {

                for (int i = 0; i < bytes.Length; i++)

                {

                    str += bytes[i].ToString("X2");

                }

            }

            return str;

        }

        /// <summary>

        /// 将?汉o字Á?转Áa换?成¨¦16进?制?

        /// </summary>

        /// <param name="str">汉o字Á?</param>

        /// <param name="charset">编À¨¤码?:êo如¨?“¡ãUDF-8,ê?gb2312”¡À</param>

        /// <param name="fenge">是º?否¤?用®?‘?,ê?’¡¥号?隔?开a</param>

        /// <returns></returns>

        private string ToHex(string str, string charset, bool fenge)

        {

            if ((str.Length % 2) != 0)  //加¨®一°?个?空?格?字Á?符¤?

                str += "";

 

            Encoding enc = Encoding.GetEncoding(charset);   //编À¨¤码?类¤¨¤型¨ª

            byte[] bytes = enc.GetBytes(str);               //转Áa换?成¨¦字Á?节¨²数ºy组Á¨¦

 

            string result = string.Empty;

            //逐e一°?转Áa换?

            for (int i = 0; i < bytes.Length; i++)

            {

                result += string.Format("{0:X}", bytes[i]);

                //是º?否¤?用®?逗o号?隔?开a

                if (fenge && i != bytes.Length - 1)

                {

                    result += string.Format("{0}", ",");

                }

            }

            return result;

        }

        /// <summary>

        /// 把ã?十º?六¢¨´进?制?转Áa换?成¨¦汉o字Á?

        /// </summary>

        /// <param name="hex"></param>

        /// <param name="charset"></param>

        /// <returns></returns>

        private string HexToString(string hex, string charset)

        {

            hex = hex.Replace(" ", "");

            hex = hex.Replace(",", "");

            hex = hex.Replace("\\", "");

            hex = hex.Replace("\n", "");

            if ((hex.Length %2) != 0)

            {

                hex += "20";   //加¨®一°?个?空?格?字Á?符¤?

            }

 

            byte[] bytes = new byte[hex.Length / 2];

 

            for (int i = 0; i < bytes.Length; i++)

            {

                //两¢?个?16进?制?的Ì?字Á?符¤?占?一°?个?字Á?节¨²

                bytes[i] = byte.Parse(hex.Substring(i * 2, 2),NumberStyles.HexNumber) ;  

 

            }

            Encoding enc = Encoding.GetEncoding(charset);   //指?定¡§编À¨¤码?

            return enc.GetString(bytes);    //把ã?字Á?节¨²数ºy组Á¨¦转Áa换?成¨¦

        }

 

 

===============================

 string str = "FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16";

(省略去空格算法)去空格得到 string str1= "FEFEFE68AAAAAAAAAAAA681300DF16";

private static byte[] HexToByte(string hexString)//字串符转换成16进制byte[]
        {
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }//返回的结果就是16进制的byte[]

posted on 2013-10-24 21:31  RJ  阅读(861)  评论(0)    收藏  举报

导航