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);
}

posted @ 2011-06-26 00:30  空头支票  Views(1028)  Comments(1)    收藏  举报