System.Text.Encoding.Default.GetString(bc);是按ASCII转成string的,所以值会变
static void Main()
{
string mystr = "ac";
byte[] bc = StringToByte(mystr);
string s = ByteToString(bc);
} static byte[] StringToByte(string s)
{
byte[] array = new byte[s.Length];
for (int i = 0; i < s.Length; i++)
{
string str = s.Substring(i, 1);
array[i] = (byte)Convert.ToInt32(str, 16);
} return array;
} static string ByteToString(byte[] bs)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(Convert.ToString(b, 16));
}
return sb.ToString();
}
static void Main()
{
string mystr = "ac";
byte[] bc = StringToByte(mystr);
string s = ByteToString(bc);
} static byte[] StringToByte(string s)
{
byte[] array = new byte[s.Length];
for (int i = 0; i < s.Length; i++)
{
string str = s.Substring(i, 1);
array[i] = (byte)Convert.ToInt32(str, 16);
} return array;
} static string ByteToString(byte[] bs)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(Convert.ToString(b, 16));
}
return sb.ToString();
}
就是说byte 数组的2进制代码和 String的代码是一样的。System.Text.Encoding.Default.GetString是按ASCII码转,转的是内码
你的函数以明码字符的型式显示的,我要的不是这个结果。string 中应该是不可显示的16进制内码,显示出来应该是内码
string mystr= "ca" ;
byte[] buf=Encoding.Default.GetBytes(textBox1.Text); //转为byte数组
mystr = Encoding.Default.GetString(buf); //转为string
string 的成员 比如说 长度为1,第一个字符 是CA,但如果转成ASCII码的话是不可见字符,就变成?号(3f)了,那string中可以存在一个成员他的内码是CA吗?
那直接用
string ss = System.Text.Encoding.Default.GetString(bc); 数组转成 string
byte[] cc = System.Text.Encoding.Default.GetBytes(ss); 转回数组查看内容是否正确
就可以了
static void Main()
{
string mystr = "ca"; byte[] bc = StringToByte(mystr); string a = ByteToString(bc);//Encoding.Default.GetString(bc);
} static byte[] StringToByte(string s)
{
byte[] array = new byte[s.Length / 2];
for (int i = 0; i < s.Length / 2; i++)
{
string str = s.Substring(i, 2);
array[i] = (byte)Convert.ToInt32(str, 16);
} return array;
} static string ByteToString(byte[] bs)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(Convert.ToString(b, 16));
}
return sb.ToString();
}
{
string[] ByteStrings = new string[InString.Length / 2];
for (int i = 0; i < InString.Length; i += 2)
{
ByteStrings[i / 2] = InString.Substring(i, 2);
}
byte[] ByteOut;
ByteOut = new byte[ByteStrings.Length];
for (int i = 0; i <= ByteStrings.Length - 1; i++)
{
ByteOut[i] = byte.Parse(ByteStrings[i], System.Globalization.NumberStyles.HexNumber);
}
return ByteOut;
}这个没问题,主要是System.Text.Encoding.Default.GetString(bc);
当参数不是汉字也不是ASCII字符而是大于0x80的ASCII的扩展字符时,就出错了。就变成了?,即0x3F
把System.Text.Encoding.Default.GetString(bc); 换成ByteToString(bs);
static string ByteToString(byte[] bs)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(Convert.ToString(b, 16));
}
return sb.ToString();
}
我上面的代码有个地方错了
static byte[] StringToByte(string s)
{
byte[] array = new byte[s.Length / 2];
for (int i = 0; i < s.Length / 2; i++)
{
string str = s.Substring(i*2, 2);
array[i] = (byte)Convert.ToInt32(str, 16);
} return array;
}
一般用 UTF-8
len=8明白?这个意思。