C# 16进制与字符串、字节数组之间的转换

/// <summary>
/// 字符串转16进制字节数组
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
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进制字符串
/// <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;
}
从汉字转换到16进制
/// <summary>
/// 从汉字转换到16进制
/// </summary>
/// <param name="s"></param>
/// <param name="charset">编码,如"utf-8","gb2312"</param>
/// <param name="fenge">是否每字符用逗号分隔</param>
/// <returns></returns>
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进制转换成汉字
///<summary>
/// 从16进制转换成汉字
/// </summary>
/// <param name="hex"></param>
/// <param name="charset">编码,如"utf-8","gb2312"</param>
/// <returns></returns>
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.jb51.net/article/18147.htm

 

时间: 2024-10-21 19:28:09

C# 16进制与字符串、字节数组之间的转换的相关文章

给串口发送16进制字符串命令和包括16进制命令转换为字节数组

using System;using System.Collections.Generic;using System.Text;using System.IO.Ports;namespace SerialPortControl{    public class PortControl    {         /// <summary>        /// 向端口中发送命令.        /// </summary>        /// <param name=&quo

16进制的字符串转成16进制的byte数组

问题描述 例如Stringa="010A"转换成byteresult[]=newbyte[0x01,0x0A] 解决方案 解决方案二:ASCIIEncoding解决方案三:string[]subs=a.Split('');byteresult[]=newbyte[subs.Length];Split得到数组subs,然后循环转换,result[i]=Int32.Parse(subs[i],"0X");解决方案四:vara="5A-5C-1A-00-00-0

16进制字符串-C# 16进制的字符串转byte数组

问题描述 C# 16进制的字符串转byte数组 如字符串:0xFF 0x01 0x01 0x02 0xEE 转换成byte byte[0]=0xFF; byte[1]=0x01

C# 16进制与字符串、字节数组之间的转换_C#教程

复制代码 代码如下: /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(&quo

c#实现16进制和字符串之间转换的代码_C#教程

十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值. 获取与十六进制字符串中的每个值对应的字符. 将十六进制 string 转换为整型. 将十六进制 string 转换为浮点型. 将字节数组转换为十六进制 string. 示例 此示例输出 string 中的每个字符的十六进制值.首先,它将 string 分析为字符数组,然后对每个字符调用 ToInt32(Char) 以获取相应的数字值.最后,在 string 中将数字的格式设置为

java发送heartbeat心跳包(byte转16进制)_java

复制代码 代码如下: package com.jxy.web; import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.Socket;import java.net.UnknownHostException; import com.jxy.tools.MyByte; pu

C# 怎么以16进制向串口发送这个字符串

问题描述 C# 怎么以16进制向串口发送这个字符串 0x63 0x69 0x72 0x20 0x32 0x32 0x0D 0x0A 怎么用C# 以16进制向串口发送这个字符串 解决方案 serialPort1 = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); serialPort1.Open(); serialPort1.WriteLine(new string(new char[] { 0x63 0x69 0x

16进制编码与字符串的互相转化

Q:16进制编码与字符串的互相转化 A: string ddd = "jinjazz路过"; string strHex = BitConverter.ToString(System.Text.Encoding.Default.GetBytes(ddd)); Console.WriteLine(strHex); string[] strChars=strHex.Split('-'); byte[] b = new byte[strChars.Length]; for (int i=0;

socket接收并显示16进制的数据

问题描述 socket接收并显示16进制的数据 这是编写的客户端代码,接收服务器发送的16进制的数据,但是现实不出来. 解决方案 byte []data=new byte [1024]; int i=0; for(i=0;i<data.length;i++) textbox1.Text+=data[i].ToString("X2");//转成16进制字符串显示 解决方案二: 16进制数据,你需要转换为字符串等才能显示,它本身不一定是可见字符 解决方案三: 一个字节一个字节的读,然