《转换篇》byte数组与16进制字符串

发布时间 2023-08-25 09:49:34作者: Fusio

参考链接:https://blog.csdn.net/elie_yang/article/details/103684180

1:单个byte转16进制字符串

byte _byte = 97;
string result= Convert.ToString(_byte, 16);// result="61"

不足2位补零:例如换行符:\n 对应ASCII表的10进制为10.

byte _byte = 10;
string result= Convert.ToString(_byte, 16); // a
result = _byte.ToString("X2"); //0A 或小写 .ToString("x2") 变成0a

2:byte[]转16进制字符串

有了上面的情形1,byte数组转16进制字符串,只需要循环逐个转换,然后拼接所有字符串返回结果即可,代码如下:

/// <summary>
/// 字节数组转16进制字符串:空格分隔
/// </summary>
/// <param name="byteDatas"></param>
/// <returns></returns>
public static string ToHexStrFromByte(this byte[] byteDatas)
{
	StringBuilder builder = new StringBuilder();
	for (int i = 0; i < byteDatas.Length; i++)
	{
		builder.Append(string.Format("{0:X2} ", byteDatas[i]));
	}
	return builder.ToString().Trim();
}

3:普通字符串转16进制格式字符串

/// <summary>
/// 用指定编码将给定的字符串转16进制格式字符串
/// </summary>
/// <param name="plainString">待转换的字符串</param>
/// <param name="encode">编码规则</param>
/// <returns></returns>
public static string ToHexString(this string plainString, Encoding encode)
{
	byte[] byteDatas = encode.GetBytes(plainString);
	return ToHexStrFromByte(byteDatas);
}

方式2:

public static string ToHexString(this string plainString, Encoding encode)
{
   return BitConverter.ToString(encode.GetBytes(plainString)).Replace("-", " ");
}

用法: string test= "%01#abcABCR00051**\r\n".ToHexString(Encoding.ASCII);

结果:25 30 31 23 61 62 63 41 42 43 52 30 30 30 35 31 2A 2A 0D 0A

4:16进制字符串格式转化byte数组

下面的转化假定传过来的是类似“25 30 31 23 61 62 63 41 42 43 52 30 30 ”这样的格式。

/// <summary>
/// 16进制格式字符串转字节数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] ToBytesFromHexString(this string hexString)
{
	//以 ' ' 分割字符串,并去掉空字符
	string[] chars = hexString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
	byte[] returnBytes = new byte[chars.Length];
	//逐个字符变为16进制字节数据
	for (int i = 0; i < chars.Length; i++)
	{
		returnBytes[i] = Convert.ToByte(chars[i], 16);
	}
	return returnBytes;
}

在使用1中利用了Convert.ToString(byte,16) 转化成16进制,反过来,16进制的字符可以利用Convert.ToByte(string, 16)转化成byte

5:16进制字符串格式转化成可阅读文本

基于使用4,可得到下面的方法

/// <summary>
/// 16进制格式字符串转普通文本
/// </summary>
/// <param name="hexString">16进制格式字符串</param>
/// <param name="encode">编码规则</param>
/// <returns></returns>
public static string ToStringFromHexString(this string hexString, Encoding encode)
{
	byte[] _bytes = ToBytesFromHexString(hexString);
	return encode.GetString(_bytes);
}

使用: string hexStr= "%01#abcABCR00051**\r\n".ToHexString(Encoding.ASCII);

//25 30 31 23 61 62 63 41 42 43 52 30 30 30 35 31 2A 2A 0D 0A
string normalStr = hexStr.ToStringFromHexString(Encoding.ASCII);