1.将16进制转换为UTF8格式
Send:EE 55 77 UU
outString:你好
static string HexToReadableString(string hexString)
{
lock (str)
{
// 移除所有空格
hexString = hexString.Replace(" ", "");
// 创建一个字节数组用于存储转换后的字节
byte[] bytes = new byte[hexString.Length / 2];
// 将十六进制字符串转换为字节数组
for (int i = 0; i < bytes.Length; i++)
{
// 提取每对十六进制字符
string hexPair = hexString.Substring(i * 2, 2);
// 将十六进制对转换为字节
bytes[i] = Convert.ToByte(hexPair, 16);
}
// 将字节数组转换为 ASCII 字符串
string txt = System.Text.Encoding.UTF8.GetString(bytes);
return txt;
}
}
2.将形成的16进制字符转换为 Byte 用于发送
SendString:EE 55 77 UU
outByte[]:EE5577UU
static byte[] ConvertHexStringToByteArray(string hexString)
{
// 移除任何空格
string cleanedHexString = hexString.Replace(" ", "");
// 确保字符串长度是偶数
if (cleanedHexString.Length % 2 != 0)
{
throw new ArgumentException("Invalid hex string length");
}
byte[] byteArray = new byte[cleanedHexString.Length / 2];
for (int i = 0; i < byteArray.Length; i++)
{
string hexPair = cleanedHexString.Substring(i * 2, 2);
byteArray[i] = Convert.ToByte(hexPair, 16);
}
return byteArray;
}
3.将接收到的Byte 转换为字符:
Send Byte[]:EENNII99
outString:EE NN II 99
static string ByteArrayToHexString(byte[] byteArray)
{
StringBuilder hexString = new StringBuilder(byteArray.Length * 2);
foreach (byte b in byteArray)
{
hexString.AppendFormat("{0:X2} ", b);
}
return hexString.ToString().Trim();
}
4.异或算法
SendString:EE HH 77 09
outString:09
public static string XOR(string hexData)
{
byte[] data = HexStringToByteArray(hexData.Replace(" ", ""));
// 计算异或结果
byte xorResult = 0;
foreach (byte b in data)
{
xorResult ^= b;
}
// 输出结果
return xorResult.ToString("X2");
}
static byte[] HexStringToByteArray(string hex)
{
int length = hex.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}