为什么从byte[]转为string然后转为byte[]之后结果和原来的byte[]不一样?

afei82220 2007-01-24 02:10:20
哪位牛人帮小弟看下,代码如下:
public void Start0()
{
byte[] b = new byte[1];
b[0] = Convert.ToByte("10101000", 2);
int i = Convert.ToInt32(b[0]);
Console.WriteLine(i);
string s = Encoding.ASCII.GetString(b);
byte[] temp = Encoding.ASCII.GetBytes(s);
int j = Convert.ToInt32(temp[0]);
Console.WriteLine(j);

}
结果打印如下:
168
63
为什么两者不一样啊?
...全文
334 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
heilong05 2007-02-28
  • 打赏
  • 举报
回复
Mark
afei82220 2007-01-24
  • 打赏
  • 举报
回复
就是为了节约空间把01011001形式表示的东西转化为普通字符的东西,这样传输的时候节约空间,其实把它们转化为byte[] 传输就行了,但是由于和其他消息一块编码所以如果能把"11111111"表示出来当然更好了。
kavenkk 2007-01-24
  • 打赏
  • 举报
回复
其实有点不明白你想做什么。。有什么必要非要转1111111成字符呢?也许这本来就是无字符。
说出你想做什么?
你自己思考看看是不是你一开始就想这样转来转去的想法就错了。
Eri 2007-01-24
  • 打赏
  • 举报
回复
kavenkk(晴小天)

正解。
afei82220 2007-01-24
  • 打赏
  • 举报
回复
使用Encoding.GetEncoding("GB2312")...也还是出错,那如果想表示"11111111"编码该怎么做呢?
kavenkk 2007-01-24
  • 打赏
  • 举报
回复
ASCII最大值是127
虽然扩展后的ASCII是255不过Encoding.ASCII只是us-ascii,是未扩展的。
soaringbird 2007-01-24
  • 打赏
  • 举报
回复
168不是ascii码,所以被换成问号63了
davidcao 2007-01-24
  • 打赏
  • 举报
回复
正解
kavenkk 2007-01-24
  • 打赏
  • 举报
回复
byte[] b = new byte[1];
b[0] = Convert.ToByte("10101000", 2);
int i = Convert.ToInt32(b[0]); //返回数字 168没错
Console.WriteLine(i);
string s = Encoding.ASCII.GetString(b); //可是ASCII的168已经超过字符集了。得到未知字符已经出错了,显示?(问号)。
byte[] temp = Encoding.ASCII.GetBytes(s);//未知的字符,再获取问号的代码当然就是63咯!
int j = Convert.ToInt32(temp[0]);//所以输出63
Console.WriteLine(j);

110,534

社区成员

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

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

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