c# 二进制、十六进制与字节数组的相互转换
在c#项目中用到的二进制、十六进制与字节数组的相互转换
class HexCommon
{
/// <summary>
/// 16进制字符串转字节数组
/// 如01 02 ff 0a
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] strHexToByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
{
string temp = hexString.Substring(i * 2, 2).Trim();
returnBytes[i] = Convert.ToByte(temp, 16);
}
return returnBytes;
}
/// <summary>
/// 6进制字符串转字节数组
/// </summary>
/// <param name="hexString"></param>
/// <param name="separator">分隔符</param>
/// <returns></returns>
public static byte[] strHexToByte(string hexString, char separator)
{
if (separator == char.MinValue)
{
return strHexToByte(hexString);
}
string[] hexarray = hexString.Split(separator);
List<string> temphexarray = new List<string>(hexarray);
var newhexarray = temphexarray.Where(u => u != string.Empty);
int len = newhexarray.Count();
byte[] returnBytes = new byte[len];
int i = 0;
foreach (string str in newhexarray)
{
string temp = str.Trim();
returnBytes[i] = Convert.ToByte(temp, 16);
i = i + 1;
}
return returnBytes;
}
/// <summary>
/// 字节数组转16进制字符串
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string byteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("x2") + " ";
}
}
return returnStr.Trim();
}
/// <summary>
/// 字节数组转16进制字符串 (高低位反)
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static string byteToHexStrHL(byte[] bytes)
{
string returnStr = "";
try
{
if (bytes != null)
{
for (int i = 1; i < bytes.Length;)
{
returnStr += bytes[i].ToString("x2") + " ";
returnStr += bytes[i - 1].ToString("x2") + " ";
i = i + 2;
}
}
}
catch (Exception ex)
{
}
return returnStr.Trim();
}
/// <summary>
/// 二进制字符串转字节数组
/// 如01001111 011111111
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] strBinaryToByte(string binaryString)
{
binaryString = binaryString.Replace(" ", "");
int yu = binaryString.Length % 8;
//将字符串长度变成8的倍数
if (yu != 0)
binaryString = binaryString.PadRight(binaryString.Length + 8 - yu);
StringBuilder builder = new StringBuilder();
byte[] returnBytes = new byte[binaryString.Length / 8];
for (int i = 0; i < returnBytes.Length; i++)
{
string temp = binaryString.Substring(i * 8, 8).Trim();
returnBytes[i] = Convert.ToByte(temp, 2);
}
return returnBytes;
}
/// <summary>
/// 二进制字符串转字节数组
/// 如01001111 011111111
/// </summary>
/// <param name="hexString"></param>
/// <param name="separator">分隔符</param>
/// <returns></returns>
public static byte[] strBinaryToByte(string binaryString, char separator)
{
if (separator == char.MinValue)
{
return strBinaryToByte(binaryString);
}
string[] binarray = binaryString.Split(separator);
List<string> tempbinarray = new List<string>(binarray);
var newbinarray = tempbinarray.Where(u => u != string.Empty);
int len = newbinarray.Count();
byte[] returnBytes = new byte[len];
int i = 0;
foreach (string str in newbinarray)
{
string temp = str.Trim();
returnBytes[i] = Convert.ToByte(temp, 2);
i = i + 1;
}
return returnBytes;
}
/// <summary>
/// 二进制字符串转16进制字符串(无分隔符)
/// </summary>
/// <param name="binaryString"></param>
/// <returns></returns>
public static string strBinaryTostrHex(string binaryString)
{
binaryString = binaryString.Replace(" ", "");
int yu = binaryString.Length % 8;
//将字符串长度变成8的倍数
if (yu != 0)
binaryString = binaryString.PadRight(binaryString.Length + 8 - yu);
StringBuilder builder = new StringBuilder();
int len = binaryString.Length / 8;
for (int i = 0; i < len; i++)
{
string temp = binaryString.Substring(i * 8, 8).Trim();
string str = Convert.ToInt32(temp, 2).ToString("x2");
builder = builder.Append(str);
}
return builder.ToString();
}
/// <summary>
/// 二进制字符串转16进制字符串(有分隔符)
/// </summary>
/// <param name="binaryString"></param>
/// <param name="separator">分隔符</param>
/// <returns></returns>
public static string strBinaryTostrHex(string binaryString, char separator)
{
if (separator == char.MinValue)
{
return strBinaryTostrHex(binaryString);
}
string[] binarray = binaryString.Split(separator);
StringBuilder builder = new StringBuilder();
int len = binarray.Length;
for (int i = 0; i < len; i++)
{
string bin = binarray[i].Trim();
if (bin == string.Empty) continue;
string str = Convert.ToInt32(bin, 2).ToString("x2");
builder = builder.Append(str);
builder = builder.Append(separator);
}
string returnvalue = builder.ToString();
returnvalue = returnvalue.TrimEnd(separator);
return returnvalue;
}
/// <summary>
/// 16进制字符串 转换成2进制字符串,此方法用于没有分隔符
/// 16进制格式"ff 01" 2进制格式 "10101001 11111111"
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static string strHexTostrBinary(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
{
hexString = hexString.PadRight(hexString.Length + 1);
}
StringBuilder builder = new StringBuilder();
int len = hexString.Length / 2;
for (int i = 0; i < len; i++)
{
string hex = hexString.Substring(i * 2, 2).Trim();
int a = Convert.ToInt32(hex, 16);
string str = Convert.ToString(a, 2).PadLeft(8, '0');
builder = builder.Append(str);
}
return builder.ToString();
}
/// <summary>
/// 16进制字符串 转换成2进制字符串,此方法用于有分隔符 如空格
/// 16进制格式"ff 01" 2进制格式 "10101001 11111111"
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static string strHexTostrBinary(string hexString, char separator)
{
if (separator == char.MinValue)
return strHexTostrBinary(hexString);
string[] hexarray = hexString.Split(separator);
StringBuilder builder = new StringBuilder();
int len = hexarray.Length;
for (int i = 0; i < len; i++)
{
string hex = hexarray[i].Trim();
if (hex == string.Empty) continue;
int a = Convert.ToInt32(hex, 16);
string str = Convert.ToString(a, 2).PadLeft(8, '0');
builder = builder.Append(str);
builder = builder.Append(separator.ToString());
}
string returnvalue = builder.ToString();
returnvalue = returnvalue.TrimEnd(separator);
return returnvalue;
}
}