1. 程式人生 > >將字符串轉換成16進制

將字符串轉換成16進制

lin 推薦 bytes str 返回 tostring repl ron 一半

原文:將字符串轉換成16進制

1、將普通字符串轉換成16進制的字符串。

點擊進入推薦鏈接

class Program
{
    static void Main(string[] args)
    {
        string str = "Hello,C#!!!";
        //調用。
        string result = StringToHex16String(str);
        Console.WriteLine(string.Format("將普通字符串:{0}轉換成16進制字符串是:{1}", str, result));
        Console.ReadKey();
    }    
    
/// <summary> /// 此方法用於將普通字符串轉換成16進制的字符串。 /// </summary> /// <param name="_str">要轉換的字符串。</param> /// <returns></returns> public static string StringToHex16String(string _str) { //將字符串轉換成字節數組。 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(_str);
//定義一個string類型的變量,用於存儲轉換後的值。 string result = string.Empty; for (int i = 0; i < buffer.Length; i++) { //將每一個字節數組轉換成16進制的字符串,以空格相隔開。 result += Convert.ToString(buffer[i], 16) + " "; } return result; } }

轉換結果是:

技術分享圖片

2、將16進制的字符串轉換成普通字符串。

class Program
{
    static void Main(string[] args)
    {
        string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
        string result = Hex16StringToString(hex16String);
        Console.WriteLine("將16進制字符串:{0}轉換成普通字符串是:{1}", hex16String, result);
        Console.ReadKey();
    }

    /// <summary>
    /// 此方法用於將16進制的字符串轉換成普通字符串。
    /// </summary>
    /// <param name="_hex16String">要轉換的16進制的字符串。</param>
    /// <returns></returns>
    private static string Hex16StringToString(string _hex16String)
    {
        string result = string.Empty;
        //以空格分割字符串。
        string[] chars = _hex16String.Split(new char[] {   }, StringSplitOptions.RemoveEmptyEntries);
        //聲明一個字節數組,其長度等於分割的字符串的長度。
        byte[] buffer = new byte[chars.Length];
        for (int i = 0; i < buffer.Length; i++)
        {
            //將chars數組中的元素轉換成字節數組。
            buffer[i] = Convert.ToByte(chars[i], 16);
        }
        //將字節數組轉換成字符串。
        result = System.Text.Encoding.UTF8.GetString(buffer);
        //返回。
        return result;
    }
}

效果圖:

技術分享圖片

3、將16進制的字符串轉換成16進制的字節數組。

class Program
{
    static void Main(string[] args)
    {
        string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
        //引用。
        byte[] bytes = Hex16StringToHex16Byte(hex16String);
    }

    /// <summary>
    /// 此方法用於將16進制的字符串轉換成16進制的字節數組
    /// </summary>
    /// <param name="_hex16ToString">要轉換的16進制的字符串。</param>
    public static byte[] Hex16StringToHex16Byte(string _hex16String)
    {
        //去掉字符串中的空格。
        _hex16String = _hex16String.Replace(" ", "");
        if (_hex16String.Length / 2 == 0)
        {
            _hex16String += " ";
        }
        //聲明一個字節數組,其長度等於字符串長度的一半。
        byte[] buffer = new byte[_hex16String.Length / 2];
        for (int i = 0; i < buffer.Length; i++)
        {
            //為字節數組的元素賦值。
            buffer[i] = Convert.ToByte((_hex16String.Substring(i * 2, 2)), 16);
        }
        //返回字節數組。
        return buffer;
    }
}

效果圖:

技術分享圖片

4、將16進制的字節數組轉換成16進制的字符串。

class Program
{
    static void Main(string[] args)
    {
        string hex16String = "48 65 6c 6c 6f 2c 43 23 21 21 21";
        byte[] bytes = Hex16StringToHex16Byte(hex16String);
        string result = Hex16ByteToHex16String(bytes);
        Console.WriteLine(string.Format("轉換成16進制的字符串是:{0}", result));
        Console.ReadKey();
    }

    /// <summary>
    /// 此方法用於將16進制的字節數組轉換成16進制的字符串。
    /// </summary>
    /// <param name="_hex16Byte">要轉換的16進制的字節數組。</param>
    /// <returns></returns>
    public static string Hex16ByteToHex16String(byte[] _hex16Byte)
    {
        string result = string.Empty;
        //如果字節數組不為空。
        if (_hex16Byte != null)
        {
            for (int i = 0; i < _hex16Byte.Length; i++)
            {
                //將每一個字節數組轉換成16進制string類型的字符串,用空格分隔開。
                result += _hex16Byte[i].ToString("X2") + " ";
            }
        }
        return result;
    }
}

效果圖:

技術分享圖片

5、將字符串轉換成16進制。

class Program
{
    static void Main(string[] args)
    {
        string str = "自由!!!";
        string result = StringTo16Hex(str, Encoding.UTF8, true);
        Console.WriteLine(string.Format("將字符串:{0}轉換成16進制後是:{1}", str, result));
        Console.ReadKey();
    }

    /// <summary>
    /// 此方法用於將字符串轉化成16進制。
    /// <param name="_str">要轉換的字符串。</param>
    /// <param name="_encode">編碼格式(UTF-8、gb2312)</param>
    /// <param name="_isHaveSpace">是否用空格分隔</param>
    // <returns></returns>
    public static string StringTo16Hex(string _str, Encoding _encode,bool _isHaveSpace)
    {
        string result = string.Empty;
        if (_str.Length / 2 != 0)
        {
            _str += " ";
        }
        //將字符串轉換成字節數組。
        byte[] buffer = _encode.GetBytes(_str);
        for (int i = 0; i < buffer.Length; i++)
        {
            result += string.Format("{0:X}", buffer[i]);
            if (_isHaveSpace && (i != buffer.Length - 1))
            {
                //result += " ";
                //或者寫成以下這種。
                result += string.Format("{0}", " ");
            }
        }
        return result;
    }
}

效果圖:

技術分享圖片

6、將16進制轉換成字符串。

class Program
{
    static void Main(string[] args)
    {
        string str = "自由!!!";
        string result = StringTo16Hex(str, Encoding.UTF8, true);
        Console.WriteLine();
        Console.WriteLine(string.Format("將字符串:{0}轉換成16進制後是:{1}", str, result));
        Console.WriteLine("---------------------------------");
        string result2 = Hex16ToString(result,Encoding.UTF8);
        Console.WriteLine(string.Format("將16進制:{0} 轉換成字符串是:{1}", result, result2));
        Console.ReadKey();
    }

    /// <summary>
    /// 此方法用於將16進制轉換成字符串。
    /// </summary>
    /// <param name="_str">要轉換的16進制。</param>
    /// <param name="_encode">編碼的格式。</param>
    /// <returns></returns>
    public static string Hex16ToString(string _str, Encoding _encode)
    {
        if (_str == null)
        {
            return "";
        }
        //去掉空格、逗號、斜杠
        _str = _str.Replace(",", "");
        _str = _str.Replace("\n", "");
        _str = _str.Replace("\\", "");
        _str = _str.Replace(" ", "");
        if (_str.Length % 2 == 0)
        {
            _str += "20"; //空格
        }
        //新建字節數組。
        byte[] buffer = new byte[_str.Length / 2];
        for (int i = 0; i < buffer.Length; i++)
        {
            try
            {
                //每兩個字符是一個 byte。   
                buffer[i] = byte.Parse(_str.Substring(i * 2, 2),
                System.Globalization.NumberStyles.HexNumber);
            }
            catch (Exception ex)
            {
                //錯誤異常處理。
                throw ex; 
            }               
        }
        //返回
        return _encode.GetString(buffer, 0, buffer.Length);
    }
}

效果圖:

技術分享圖片

參考博客鏈接:https://blog.csdn.net/zdhlwt2008/article/details/52749658

點擊進入推薦鏈接

End!

將字符串轉換成16進制