BitConverter类的一个还原最初字符串操作
.NET里有个BitConverter的类ToString,能把byte数组转成E9-AB-98-E5-85-B4-E5-95-A6-EF-BC-81格式的十六进制形式连接的字符串,但是好像没有反过来转换的,用reflector参看里面的算法写一个反转的方法:
static void Main(string[] args)
{
string OrignalInput = "高兴啦!";
Encoding utf8Encoder = System.Text.Encoding.UTF8;
byte[] bytes = utf8Encoder.GetBytes(OrignalInput);
string bitString = BitConverter.ToString(bytes);
Console.WriteLine("input:" + bitString);
Console.WriteLine("result:" + utf8Encoder.GetString(GetPreBytes(bitString)));
Console.ReadKey();
}
private static byte[] GetPreBytes(string bitString)
{
//一个汉字对应三个byte,一个byte三个结果字符,一个汉字对应9个结果字符
int num = bitString.Length;
//一个char对应9个结果字符
int byteCount = num / 3 + 1; //原字符串对应的结果字符数
//去除一个"-"字符后
byte[] result = new byte[byteCount * 3];
for (int i = 0; i < byteCount; i++)
{
char c = bitString[i * 3]; //原字符串组的第一个
char c2 = bitString[i * 3 + 1]; //原字符串组的第二个
result[i] = (byte)(HexToDec(c) * 0x10 + HexToDec(c2)); //除数乘以16和余数之合
}
return result;
}
//十六进制char形式转换成10进制
private static int HexToDec(char c)
{
if (c <= 0x39) //小于 char '9',
{
return (int)c - 0x30;
}
return ((((int)c) - 0x41) + 10);
}

浙公网安备 33010602011771号