如何将16进制字符串转换成普通字符串?
如何将16进制字符串转换成普通字符串?
例如
string s1 = "B2DDD2B6" //草叶的16进制字符串
return "草叶"
问题点数:50、回复次数:5Top
1 楼saucer(思归)回复于 2003-12-04 20:26:18 得分 15
your byte order is wrong, try
using System.Text;
string GetValue(string sHex)
{
StringBuilder sb = new StringBuilder();
Encoding enc = Encoding.GetEncoding("GB2312");
for(int i=0; i < sHex.Length - 3; i +=4)
{
string sub = sHex.Substring(i,4);
//byte order is wrong, need to do a switch
sub = sub.Substring(2,2) + sub.Substring(0,2);
int c = int.Parse(sub,System.Globalization.NumberStyles.HexNumber);
byte[] bs = BitConverter.GetBytes(c);
sb.Append(enc.GetString(bs));
}
return sb.ToString();
}
Console.Write(GetValue("B2DDD2B6"));Top
2 楼lfkool(龙飞)回复于 2003-12-04 21:18:02 得分 0
学习Top
3 楼zt371(dudu)回复于 2003-12-04 21:56:06 得分 0
按照saucer(思归) 的方法,怎么得出来得只有一个字啊?Top
4 楼xiaha3(夏)回复于 2003-12-04 21:57:55 得分 35
一共4个字节应该是2个汗字
我的正确
public string check(string s1)
{
Encoding enc = Encoding.GetEncoding("GB2312");
char c,d;
byte a=0,b=0;
byte[] bytes=new byte[s1.Length /2];
char[] chars=new char[s1.Length];
char[] chars1=s1.ToCharArray ();
for(int i=0 ;i<chars1.Length ;i=i+2)
{c=chars1[i];
d=chars1[i+1];
switch( c)
{
case 'A':
a=(byte)10;
break;
case 'B':
a=(byte)11;
break;
case 'C':
a=(byte)12;
break;
case 'D':
a=(byte)13;
break;
case 'E':
a=(byte)14;
break;
case 'F':
a=(byte)15;
break;
default:
a=byte.Parse(chars1[i].ToString ());
break;
}
switch(d)
{
case 'A':
b=(byte)10;
break;
case 'B':
b=(byte)11;
break;
case 'C':
b=(byte)12;
break;
case 'D':
b=(byte)13;
break;
case 'E':
b=(byte)14;
break;
case 'F':
b=(byte)15;
break;
default:
b=byte.Parse (chars1[i+1].ToString ());
break;
}
bytes[i/2]=(byte)(a*16+b);
}
string s=enc.GetString(bytes);
int co=s.Length ;
return s.ToString ();
}
Top
5 楼FileNewExit((呵呵))回复于 2003-12-04 22:15:51 得分 0
saucer(思归)的代码会返回
草 叶
byte[] bs = BitConverter.GetBytes(c);//bs[0] = 0xB2
//bs[1] = 0xDD
//bs[2] = 0x0
//bs[3] = 0x0
byte[] bs2 = new byte[]{bs[0],bs[1]};//加上这个就Ok了
sb.Append(enc.GetString(bs));Top




