0
点赞
收藏
分享

微信扫一扫

【C#】C#中常用字符串转16进制



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



举报

相关推荐

0 条评论