- 主页
 - GitHub开源地址
 - Unity3D插件分享
 - 简书地址
 - 我的个人博客
 - QQ群:1040082875
 
一、前言
在软硬件开发中,常常会遇到将字符串转16进制的需求,因为设备的中控码常见的就是Hex编码格式,也就是16进制,下面就来看下如何字符串如何转化16进制吧
二、字符串转16进制
/// <summary>
/// 字符串转16进制字符
/// </summary>
/// <param name="_str">字符串</param>
/// <param name="encode">编码格式</param>
/// <returns></returns>
private string StringToHexString(string _str,Encoding encode)
{
    //去掉空格
    _str = _str.Replace(" ", "");
    //将字符串转换成字节数组。
    byte[] buffer = encode.GetBytes(_str);
    //定义一个string类型的变量,用于存储转换后的值。
    string result = string.Empty;
    for (int i = 0; i < buffer.Length; i++)
    {
        //将每一个字节数组转换成16进制的字符串,以空格相隔开。
        result += Convert.ToString(buffer[i], 16);
    }
    return result;
}三、16进制转字符串
/// <summary>
/// 16进制字符转字符串
/// </summary>
/// <param name="hex">16进制字符</param>
/// <param name="encode">编码格式</param>
/// <returns></returns>
private string HexStringToString(string hex,Encoding encode)
{
    byte[] buffer = new byte[hex.Length / 2];
    string result = string.Empty;
    for (int i = 0; i < hex.Length/2; i++)
    {
        result = hex.Substring(i * 2, 2);
        buffer[i] = Convert.ToByte(result, 16);
    }
    //返回指定编码格式的字符串
    return encode.GetString(buffer);
}四、字符串转16进制优化版
在实际的开发中,往往会遇到字符串转成16进制也不管用的情况,可能是因为机器的Hex码已经是16进制的字符串了,再转化16进制也不对,就比如下面这个:
50H 57H 52H 20H 4FH 4EH 0DH
 转化16进制:
 353048203537482035324820323048203446482034454820304448
根本不对嘛,应该转成
0x50, 0x57, 0x52, 0x20, 0x4F, 0x4E, 0x0D
代码:
/// <summary>
/// 字符串转16进制字符2
/// </summary>
/// <param name="_str">字符串</param>
/// <param name="encode">编码格式</param>
/// <returns></returns>
private string StringToHexString2(string _str, Encoding encode)
{
    //去掉空格
    _str = _str.Replace(" ", "");
    string[] arr = _str.Split('H');
    //定义一个string类型的变量,用于存储转换后的值。
    string result = string.Empty;
    for (int i = 0; i < arr.Length; i++)
    {
        arr[i] = "0x"+arr[i].Substring(0, 2)+",";
        if (i == arr.Length -1)
        {
            arr[i] = "0x" + arr[i].Substring(0, 2);
        }
        result += arr[i];
    }
    return result;
}当然实际格式要按照实际的情况分析,最主要的是将Hex中控码转成“0x”这种格式










