C#字节数组和字符串相互转换

xinshoudan 2013-12-05 05:22:56
请教一个问题,就是C#字节数组和字符串互转的时候如果全是数字就不会出现问题, 但不是数字就有问题了;最后发现是转换的长度不相等。大家能帮忙解释一下,不同编码字节数组和字符串互转后长度不一致的原因吗?
还有能不能给一个具体的转换的方法,数字、字母、汉字都适用的。
...全文
7781 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SugarBaiTu 2016-08-17
  • 打赏
  • 举报
回复
用4楼的方法是可行的
jdqm007 2014-08-27
  • 打赏
  • 举报
回复
引用 11 楼 sswwee 的回复:
只需要记住一点,encoding.getbytes encoding.tostring的时候,必须用同一种encoding就不会有错
是有问题的,我遇到了楼主一样的情况 做签名时生成的字节数组,128位,然后转成了string,这个时候再用同一种encoding转出字节数组的时候发现长度已经发生了变化。用gb2312时转出的长度是116,用utf-8转出的是246,希望有人能知道为什么会这样。 貌似java并没有这种问题
敌敌畏耶 2013-12-06
  • 打赏
  • 举报
回复
引用 6 楼 fanlin247919 的回复:
[quote=引用 1 楼 yuekunge 的回复:]
byte[] bs = Encoding.UTF8.GetBytes("你的字符串");
            string str = Encoding.UTF8.GetString(bs);
这种方法我用了之后就出现问题了,有时候前后长度不等[/quote] 什么长度不等?
sswwee 2013-12-06
  • 打赏
  • 举报
回复
只需要记住一点,encoding.getbytes encoding.tostring的时候,必须用同一种encoding就不会有错
敌敌畏耶 2013-12-06
  • 打赏
  • 举报
回复
引用 9 楼 fanlin247919 的回复:
[quote=引用 8 楼 yuekunge 的回复:] [quote=引用 6 楼 fanlin247919 的回复:] [quote=引用 1 楼 yuekunge 的回复:]
byte[] bs = Encoding.UTF8.GetBytes("你的字符串");
            string str = Encoding.UTF8.GetString(bs);
这种方法我用了之后就出现问题了,有时候前后长度不等[/quote] 什么长度不等?[/quote]数组长度不等[/quote] 这种为什么需要他的长度呢··我晕··
xinshoudan 2013-12-06
  • 打赏
  • 举报
回复
引用 8 楼 yuekunge 的回复:
[quote=引用 6 楼 fanlin247919 的回复:] [quote=引用 1 楼 yuekunge 的回复:]
byte[] bs = Encoding.UTF8.GetBytes("你的字符串");
            string str = Encoding.UTF8.GetString(bs);
这种方法我用了之后就出现问题了,有时候前后长度不等[/quote] 什么长度不等?[/quote]数组长度不等
算法大牛 2013-12-05
  • 打赏
  • 举报
回复
因为计算机上通常用来处理的字符串是Unicode编码的,当转化成其他格式的编码后,Byte数组的长度自然和Unicode的不相同了吧
xinshoudan 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 yuekunge 的回复:
byte[] bs = Encoding.UTF8.GetBytes("你的字符串");
            string str = Encoding.UTF8.GetString(bs);
这种方法我用了之后就出现问题了,有时候前后长度不等
窗前旧时光 2013-12-05
  • 打赏
  • 举报
回复
编码方式的问题吧
gomoku 2013-12-05
  • 打赏
  • 举报
回复
string = Convert.ToBase64String(byte[]); byte[] = Convert.FromBase64String(string);
飞小猪 2013-12-05
  • 打赏
  • 举报
回复
有些编码格式,1个字符转换后占两个字节,有些占4个字节。 我用A编码格式转换成的字节数组,你用B编码格式来转成字符串,就会产生乱码
threenewbee 2013-12-05
  • 打赏
  • 举报
回复
对,你要搞清楚什么编码。因为字符串本身并不包含编码信息,所以字节-字符串-字节这个转换无法做到还原。
敌敌畏耶 2013-12-05
  • 打赏
  • 举报
回复
byte[] bs = Encoding.UTF8.GetBytes("你的字符串");
            string str = Encoding.UTF8.GetString(bs);

110,549

社区成员

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

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

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