请教byte[]数组与string的转换问题 我采用如下方法进行转换Byte [] bb = new Bytes[256];string ss = Encoding.Default.GetString(bb);Byte [] cc = Encoding.Default.GetBytes(ss);结果这两个byte的长度是不一样的,请教这两者正确的转换方式是什么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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这种奇怪的想法。 语法上可能行,但是本人看了一遍想了想,感觉你又回去起点了bb不用转不就是Byte数组类型了吗 我的需求是这样的,需要把这个byte数组中对应的相应字符串替换成另一个字符串,比如byte中存在"123"字符串,将他替换为"456",所以我才需要把它转换为string后进行操作,大家有什么其他办法么 楼上纯扯淡“绞肉机”的例子根本不适合这个情况如果只能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} 看看下面整理的文章: string和byte[]的转换 (C#) RichTextbox 清除样式 winform ListBox控件 [100分求助]C#排列组合问题(详见帖内) private bool [,] Arr=new bool[5,5]; 按钮问题 关于DATASET更新数据库的问题.急! 我在删除文件时,出错。。请进 含泪跪求XP资源管理器工具栏里的图标 如何写这个正则表达式? 请问:在DATAGRID中,我怎么在单击其中的一栏的事件中获得该栏的某个字段的值? c# 计时器中如何移动光标的位置?? C#的Encoding.UTF8.GetBytes问题
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}