我采用如下方法进行转换Byte [] bb = new Bytes[256];string ss = Encoding.Default.GetString(bb);
Byte [] cc = Encoding.Default.GetBytes(ss);结果这两个byte的长度是不一样的,请教这两者正确的转换方式是什么
Byte [] cc = Encoding.Default.GetBytes(ss);结果这两个byte的长度是不一样的,请教这两者正确的转换方式是什么
string ss = Convert.ToBase64String(bb);
byte[] cc = Convert.FromBase64String(ss);
byte [] bb = new bytes[256];string ss = Encoding.Default.GetString(bb);
byte [] cc = Convert.FromBase64String(ss);
试试看
这能有什么“正确”转换?它们根本不是一样的东西。就好象是把猪肉塞进绞肉机,出来的是肉馅;反过来可不成立。把byte[]塞入绞肉机,出来的是string。反过来可是不成立,因为出来的string中成分已经改变了。
这个是可以的。它放弃了所谓Encoding/Default这种奇怪的想法。
如果只能Encode而不能Decode的话,或者Decode不能到到一致结果的话,Encode还有什么意义楼主你的问题在于,你吧encode和decode弄反了
Encoding.Default.GetString是个Decode的方法
Encoding.Default.GetBytes是个Encode方法你先Decode后Encode
你的第一步GetString无法保证你的原始byte能够正确的Decode
除非你的原始byte就是用对应的Encode方法生成的而3楼的顺序是合理的
Convert.ToBase64String(bb);是endoce方法
Convert.FromBase64String(ss);是decode方法当然这两组方法针对的对象不一样
你的方法是对string进行编码解码
而3楼的方法是针对byte[]编码解码所以要看你的需求选择
public static void EncodingAndDecoding() {
string testStr = "TestString";
byte[] src = Encoding.Default.GetBytes(testStr);
string tmp = Encoding.Default.GetString(src);
byte[] dst = Encoding.Default.GetBytes(tmp);
Console.WriteLine(src.Length);
Console.WriteLine(dst.Length);
}
比如ASCII编码会忽略汉字;比如UTF8解码会检查规则,如果看到一个225,它就会期待下两个字节都大于127。违反规则的结果取决于设定,可以抛出异常,也可以忽略,也可以用特定字符代替。比如下面的例子:byte[] seq1 = { 225, 51, 51 };
string s = Encoding.UTF8.GetString(seq1);
byte[] seq2 = Encoding.UTF8.GetBytes(s); // {239, 192, 189, 51, 51}