一、串口直接发送16进制数据的方法:
public Byte[] sendBuffer;//发送的数据
ComPort.Write(sendBuffer,0,sendBuffer.Length);//不用转换类型
二、string类型的表示16进制(0x)数据直接转换成byte类型的方法:
private static byte HexToByte(string hex)
{
byte tt = byte.Parse(hex,System.Globalization.NumberStyles.HexNumber);
return tt;
}
三、十进制转十六进制:
int a = 100;
String strA = a.ToString("x8"); //x8代表8位
private static byte HexToByte(string hex)
{
byte tt = byte.Parse(hex,System.Globalization.NumberStyles.HexNumber);
return tt;
}
int a = 100;
String strA = a.ToString("x8"); //x8代表8位
四、16进制字符串转换为10进制
string OppoAddr = "FF";
int Dec = Int32.Parse(OppoAddr, System.Globalization.NumberStyles.HexNumber); //方法1
Convert.ToString(Convert.ToInt32(OppoAddr, 16)); //方法2
自定义的方法:
public double Hex2Decimal(string str)
{
char[] TempStr = str.ToCharArray();
double total = 0; //转换后的最终值
double Power = 0;//转换时16的i次方(i=0,1,2...)
try
{
string strNum = "";
for(int i = 0; i < str.Length; i++)
{
strNum = TempStr[i].ToString().ToUpper();
switch (strNum)
{
case "A":
strNum = "10";
break;
case "B":
strNum = "11";
break;
case "C":
strNum = "12";
break;
case "D":
strNum = "13";
break;
case "E":
strNum = "14";
break;
case "F":
strNum = "15";
break;
default:
break;
}
Power = Math.Pow(16, str.Length - i - 1); //16的(str.Length - i - 1)次方,最大的那位在数组第一位
total += Convert.ToDouble(strNum) * Power;
}
return total;
}
catch (System.Exception ex)
{
String strErorr = ex.ToString();
return 0;
}
}
五、16进制字符串转为byte[]一模一样的方法:
现将字符串按照每两个字符分开。然后依次将这两个字符 Convert.ToByte()。
如:byte[] buf = new byte[str.Length/2]; //这里自己要加判断,看你的字符串是偶数个吗?不是怎么处理?靠你自己了
for (int i = 0; i < str.Length; i++)
{
buf[i] = Convert.ToByte(str.Substring(i*2, 2),16);
}
如:byte[] buf = new byte[str.Length/2]; //这里自己要加判断,看你的字符串是偶数个吗?不是怎么处理?靠你自己了
for (int i = 0; i < str.Length; i++)
{
buf[i] = Convert.ToByte(str.Substring(i*2, 2),16);
}
string类型转成byte[]:
byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );
//注意:这种方法会把string转换为相对应的16进制,就算string表示16进制也会。