byte数没伍组不一定能转换为字符串。
byte数组是一个物理的存贮概念,而字符串是有文化意义的。因此byte到string的转换需要指定一种编码方式。
但是,图片里的bytes根本就不是一种“文字”,你如何能把它们转换为字串?
图片里的bytes是对像素的存贮,是二进制的数据。
如果非要转换为文字,也有办法。在通过电子邮件来传送文件时,由于电子邮件协议一开始只考虑了文字的传送,颂脊而不支持二进制数据,因此,对于二进制数据,就有人发明了多种把二进制数据编码为普通文本,以及从这种文本编码转换回二进制数据的方案。
其中用得最广泛的,枯樱或就是base64编码了。这也正是你需要的答案。
方案就是:把你的byte array用Convert.ToBase64String()方法转换为文本,这种文本看起来是没有意义的,但是它是纯英文文本,可以保存在text字段里。
需要恢复时,就用Convert.FromBase64String(),从文本转回到二进制数据。
你这里是不能用 filetext = System.Text.Encoding.Default.GetString(aa)这样的方法转字符串的。。。
那个例子来说。
加入你的aa中的内容是aa={65,66,67,00,65};
你用上面的转出来的字符串就是"ABC"
这种转换方法是将每一如滑芦个元素转成对应的字符。。。而字符串的结束符就刚好是\00所以就会渣带出现你说的那种,不会转换完全,在\00之后的内容都被截断了。。。
你这种的问题的解决办法是
想办法让filetext中的内容是"6566670065";这个样子。。。
你可让搭以用
string s;
foreach(byte b in aa)
{
s=b.ToString();
if(s.Length!=2)
{
s="0"+s;
}
filetext+=s;
}
这样得到的结果就是"6566670065";
要使用的时候,就是2位一截转存到byte[]中就可以了。。。
byte[] aa=new byte[filetext/2];
for(int i=0;i
aa[i]=byte.Parse(filetext.SubString(i*2,2));
}
这样得回的结果就是aa={65,66,67,00,65};了。。。
用做塌System.Text.Encoding.ASCII.GetString试试
Default默认的一般是unicode
如果这个解决了,后面的问题就一并解决了
至于第四个档蔽问题,你去了解一下BMP位图文件行胡州的格式就明白了。
这个问题,我也遇到过,好像不行,我就是从图片流转化为二进激冲制数组,在还州铅乱原为册档流,显示图片都不行。何况字符串
直接把字节数组存到text字段不就行了