在开发一些通过串口和外部设备通讯的程序中,需要用到大量的各种字符串、byte数组等之间互相转换的问题,总结了一些小函数,可能有速度更快的方法,希望大家能帮我改正 (C#)
// 把十六进制字符串转换成字节型和把字节型转换成十六进制字符串 converter hex string to byte and byte to hex string
public static string ByteToString(byte[] InBytes)
{
string StringOut = "";
foreach (byte InByte in InBytes)
{
StringOut += String.Format("{0:X2}", InByte);
}
return StringOut;
}
public static string ByteToString(byte[] InBytes,string Param) ///为了显示方便可能需要在每个字节后面补上一个空格等)
{
string StringOut = "";
foreach (byte InByte in InBytes)
{
StringOut = StringOut + String.Format("{0:X2}", InByte) + Param ;
}
StringOut = StringOut.Substring(0, StringOut.Length - Param.Length);
return StringOut;
}
public static string ByteToString(byte iIn)
{
string sTmp = "";
// sTmp = Supply00( iIn.ToString("X") , 0, "0", 2);
sTmp = sTmp + String.Format("{0:X2}", iIn);
return sTmp;
}
public static string StrToHexAsc(string inString)
{
char[] inStringToChar = inString.ToCharArray();
string outString = "";
for (int i = 0; i < inStringToChar.Length; i++)
{
outString += String.Format("{0:X2}", Convert.ToByte(inStringToChar[i]));
}
return outString;
}
public static byte[] StringToByte(string InString,string Param)
{
string[] ByteStrings;
ByteStrings = InString.Split(Param.ToCharArray());
byte[] ByteOut;
ByteOut = new byte[ByteStrings.Length];
for (int i = 0; i <= ByteStrings.Length - 1; i++)
{
ByteOut[i] = Convert.ToByte(ByteStrings[i], 16);
}
return ByteOut;
}
public static byte[] StringToByte(string InString)
{
string[] ByteStrings;
ByteStrings = new string[InString.Length / 2];
for (int i = 0; i < ByteStrings.Length; i++)
{
ByteStrings[i] = InString.Substring(i * 2, 2);
}
byte[] ByteOut;
ByteOut = new byte[ByteStrings.Length];
for (int i = 0; i <= ByteStrings.Length - 1; i++)
{
ByteOut[i] = Convert.ToByte(ByteStrings[i], 16);
}
return ByteOut;
}
//补00函数
public static string Supply00(string sOldStr, int SupplyWay, string SupplyChar, long SupplyNum)
{
int i;
string sTmp;
sTmp = "";
for (i = sOldStr.Length; i < SupplyNum ; i++)
sTmp = sTmp + SupplyChar;
switch (SupplyWay)
{
case 0: //前补充
sTmp = sTmp + sOldStr;
break;
case 1: //后补充
sTmp = sOldStr + sTmp;
break;
default:
sTmp = sOldStr;
break;
}
return sTmp;
}
public static string HexAscToStr(string inString)
{
byte[] CardData;
CardData = StringToByte(inString);
string outString = Encoding.ASCII.GetString(CardData);
return outString;
}