C# 16进制与字符串、字节数组之间的转换
【C# 16进制与字符串、字节数组之间的转换】在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换
文章图片
文章图片
///
文章图片
/// 字符串转16进制字节数组
文章图片
///
文章图片
///
文章图片
///
文章图片
private static byte[] strToToHexByte(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++)
文章图片
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
文章图片
return returnBytes;
文章图片
}
文章图片
文章图片
///
文章图片
/// 字节数组转16进制字符串
文章图片
///
文章图片
///
文章图片
///
文章图片
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;
文章图片
}
文章图片
文章图片
///
文章图片
/// 从汉字转换到16进制
文章图片
///
文章图片
///
文章图片
/// 编码,如"utf-8","gb2312"
文章图片
/// 是否每字符用逗号分隔
文章图片
///
文章图片
public static string ToHex(string s, string charset, bool fenge)
文章图片
{
文章图片
if ((s.Length % 2) != 0)
文章图片
{
文章图片
s += " ";
//空格
文章图片
//throw new ArgumentException("s is not valid chinese string!");
文章图片
}
文章图片
System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
文章图片
byte[] bytes = chs.GetBytes(s);
文章图片
string str = "";
文章图片
for (int i = 0;
i < bytes.Length;
i++)
文章图片
{
文章图片
str += string.Format("{0:X}", bytes[i]);
文章图片
if (fenge && (i != bytes.Length - 1))
文章图片
{
文章图片
str += string.Format("{0}", ",");
文章图片
}
文章图片
}
文章图片
return str.ToLower();
文章图片
}
文章图片
文章图片
///
文章图片
/// 从16进制转换成汉字
文章图片
///
文章图片
///
文章图片
/// 编码,如"utf-8","gb2312"
文章图片
///
文章图片
public static string UnHex(string hex, string charset)
文章图片
{
文章图片
if (hex == null)
文章图片
throw new ArgumentNullException("hex");
文章图片
hex = hex.Replace(",", "");
文章图片
hex = hex.Replace("\n", "");
文章图片
hex = hex.Replace("\\", "");
文章图片
hex = hex.Replace(" ", "");
文章图片
if (hex.Length % 2 != 0)
文章图片
{
文章图片
hex += "20";
//空格
文章图片
}
文章图片
// 需要将 hex 转换成 byte 数组。
文章图片
byte[] bytes = new byte[hex.Length / 2];
文章图片
文章图片
for (int i = 0;
i < bytes.Length;
i++)
文章图片
{
文章图片
try
文章图片
{
文章图片
// 每两个字符是一个 byte。
文章图片
bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
文章图片
System.Globalization.NumberStyles.HexNumber);
文章图片
}
文章图片
catch
文章图片
{
文章图片
// Rethrow an exception with custom message.
文章图片
throw new ArgumentException("hex is not a valid hex number!", "hex");
文章图片
}
文章图片
}
文章图片
System.Text.Encoding chs = System.Text.Encoding.GetEncoding(charset);
文章图片
return chs.GetString(bytes);
文章图片
} 来源:http://www.cnblogs.com/feishanm/archive/2008/10/20/1315516.html
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 一起来学习C语言的字符串转换函数
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM