- 主页
- 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”这种格式