C# Byte[]转换成string的问题...高手来起...在线=回答...

目的:谢谢大家..看看我的目的就是把一个(bytep[])字节数组转换成一个字符串,(如一张图片转换后用肉眼看是这样的“BM諪\0\0\0\0\06\0\0\0(\0... 目的:
谢谢大家..看看
我的目的就是把一个(bytep[])字节数组转换成一个字符串,(如一张图片转换后用肉眼看是这样的“BM諪\0\0\0\0\06\0\0\0(\0\0\0(\t\0\0?\0\0....”,我要把它保存到数据库中text类型列里(不是image类型)),但是我转换不成功.

问题:
FileStream fs = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.Read);
Byte[] aa= new Byte[(int)fs.Length];
fs.Read(aa, 0, aa.Length);
//将指定字节数组中的所有字节解码为一个字符串
filetext = System.Text.Encoding.Default.GetString(aa);
fs.Close();
//然后在转换成字节数组
Byte[] bb = System.Text.Encoding.Default.GetBytes(filetext);

问题描述:
aa数组里的数据是完全正确的,
但是当我filetext = System.Text.Encoding.Default.GetString(aa);
把aa转换成字符串后,
发现Encoding.Default.GetString(aa)没有把aa里的所有字节都解码完,
(注:记事本就可以完全解码,其它图片=就不行),所以当我在把filetext转换成字节数组 的时候aa和bb这2个数组的维数不相同.导致我无法还原的文件无浏览或者不全而无法显示. 如果aa和bb相等了就说明问题解决了..

问:
1。为什么 filetext = System.Text.Encoding.Default.GetString(aa)没有 把所有字节解码?
2有没有什么方法可以让它把Byte[]里的字节全部解码并切赋值给filetext ?
3。有没有什么方法可以让aa和bb让它们相等?
4。“BM諪\0\0\0\0\06\0\0\0(\0\0\0(\t\0\0?\0\0....”是什么?

希望大家帮忙看看,有没有什么好的意见..在线=回答...
谢谢2楼..我去试试.. 试完了,还是不行
回3楼image和text是不兼容的..
谢谢5楼了,你那个方法我也用过的..但是我是在别人的数据库上做的,以前数据库就这样用的,我必须这样才能让我的程序同时能读取以前数据库的数据,又能读取我以后保存的数据..估计我的方法有问题,.他们都能实现的.
展开
 我来答
HAL9000PLUS
2010-05-21 · TA获得超过1279个赞
知道小有建树答主
回答量:663
采纳率:0%
帮助的人:713万
展开全部
byte数组不一定能转换为字符串。

byte数组是一个物理的存贮概念,而字符串是有文化意义的。因此byte到string的转换需要指定一种编码方式。

但是,图片里的bytes根本就不是一种“文字”,你如何能把它们转换为字串?
图片里的bytes是对像素的存贮,是二进制的数据。

如果非要转换为文字,也有办法。在通过电子邮件来传送文件时,由于电子邮件协议一开始只考虑了文字的传送,而不支持二进制数据,因此,对于二进制数据,就有人发明了多种把二进制数据编码为普通文本,以及从这种文本编码转换回二进制数据的方案。

其中用得最广泛的,就是base64编码了。这也正是你需要的答案。

方案就是:把你的byte array用Convert.ToBase64String()方法转换为文本,这种文本看起来是没有意义的,但是它是纯英文文本,可以保存在text字段里。
需要恢复时,就用Convert.FromBase64String(),从文本转回到二进制数据。
lovemingming
2010-06-07 · TA获得超过4137个赞
知道大有可为答主
回答量:1422
采纳率:0%
帮助的人:1414万
展开全部
你这里是不能用 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<filetext/2;i=i++)
{
aa[i]=byte.Parse(filetext.SubString(i*2,2));
}
这样得回的结果就是aa={65,66,67,00,65};了。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苌苗Us
2010-05-21 · TA获得超过340个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:421万
展开全部
用System.Text.Encoding.ASCII.GetString试试
Default默认的一般是unicode
如果这个解决了,后面的问题就一并解决了
至于第四个问题,你去了解一下BMP位图文件的格式就明白了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ybhjj2005
2010-05-21 · 超过15用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:45.7万
展开全部
这个问题,我也遇到过,好像不行,我就是从图片流转化为二进制数组,在还原为流,显示图片都不行。何况字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hacker8848
2010-05-21 · TA获得超过169个赞
知道答主
回答量:316
采纳率:100%
帮助的人:173万
展开全部
直接把字节数组存到text字段不就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式