byte与string转化

hanzhaorui 2010-02-26 03:36:22
获取图片信息,然后转化成string,再转化成byte形成图片有误,怎么回事,敬请指点!
int len = 0;
byte[] ib = new Byte[60000];
FileStream fs = new FileStream("c://g.jpg", FileMode.Open, FileAccess.Read);
fs.Read(ib, 0, 60000);
len = (int)fs.Length;
fs.Close();

string s = System.Text.Encoding.Default.GetString(ib);
byte[] b = System.Text.Encoding.Default.GetBytes(s);


MemoryStream buf = new MemoryStream(b);
Image image = Image.FromStream(buf, true);
pictureBox_File.Image = image;
...全文
460 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
其实,同样道理对于字符串加密也是一样。如果你要把字符串转换为byte[]然后加密,再把结果byte[]重新转换为字符串保存,如果最后一步过分简单处理,就会时不时地丢失一些信息,使得逆向操作时得到的解密字符串跟原来的不完全一样。这也应该注意。
hanzhaorui 2010-02-26
  • 打赏
  • 举报
回复
看来较为烦琐,多谢各位,我操作一下看看.
  • 打赏
  • 举报
回复
再将大的byte[]转换为base64编码字符串之前,可以考虑用GZipStream压缩一下。当然,转换回byte[]来之后需要解压一下。
cjcgy 2010-02-26
  • 打赏
  • 举报
回复
二进制文件直接转成字符串, 出事几乎是必然的。
不管是图片, 音频, 视频, 或者是压缩文档什么的。

因为对于byte类型, 他们可以包含所有数据。
而对于字符串, 是不行的。 很多是不能编码为字符的。
所以, 不怕效率问题的话, 处理一下吧。
自己定个和string转化的规则好了。
  • 打赏
  • 举报
回复
引用 7 楼 hanzhaorui 的回复:
主要是想在本地读取本地图片信息,传到其它机器上入库,然后再由其它机器读取返回,返回后还原显示图片,中间接口只能接收和返回串型数据.直接转是不行的.返回数据和原始数据不同.


byte[]不能随便用string保存,那会丢失许多byte。只有明确地从string转换为byte[]的才不会丢失。

你在网络上可以可靠地传送并返回byte[]吗?你在数据库中可以可靠地保存并读出byte[]吗?如果都可以就不要转换为string。如果有一处必须转换,那么要使用 Convert.ToBase64String和Convert.FromBase64String。
hanzhaorui 2010-02-26
  • 打赏
  • 举报
回复
本地读,异地存,然后再本地显示.但中间传时只能是string.
  • 打赏
  • 举报
回复
看不懂,为什么要把byte[]转换为string,再重新转换为byte[]。

后边一堆也只要一句:

Image image = System.Drawing.Image.FromStream(fs);


或者全都删去,只是写一句:

Image image = System.Drawing.Image.FromFile("c://g.jpg", )
hanzhaorui 2010-02-26
  • 打赏
  • 举报
回复
主要是想在本地读取本地图片信息,传到其它机器上入库,然后再由其它机器读取返回,返回后还原显示图片,中间接口只能接收和返回串型数据.直接转是不行的.返回数据和原始数据不同.
  • 打赏
  • 举报
回复
前边一堆应该改为

byte[] ib = System.IO.File.ReadAllBytes("c://g.jpg");

一句而已!
  • 打赏
  • 举报
回复
前边一堆应该改为

byte[] ib = ReadAllBytes("c://g.jpg");

一句而已!
zhushoudong 2010-02-26
  • 打赏
  • 举报
回复
首先转成字符型的 用强制转换 然后再转成byte看看
cjcgy 2010-02-26
  • 打赏
  • 举报
回复
我不知道你是不是想要在网络上用http传输, 又不知道咋弄, 所以只好转字符串了?

如果是的话, 你把byte先按16进制模式ToString一下,
然后发过去再用parse成byte好了。

这样至少不会丢数据。
cjcgy 2010-02-26
  • 打赏
  • 举报
回复
囧。

还可以这样啊?
我举个例子:

0x20, 0x20, 0x00, 0x30, 0x30.
转成string, 是什么样子? 假设按Ascii编码。 不考虑太复杂的编码问题。

然后你再转回去, 会发生什么?
flyerwing 2010-02-26
  • 打赏
  • 举报
回复
system.text.encoding.utf-8.getstring(byte[]array)

这样不知道成不成了

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧