首页 新闻 会员 周边

C# Encoding.UTF8.GetString 获取byte乱码问题

0
悬赏园豆:30 [待解决问题]

HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider(); //MD5CryptoServiceProvider();
byte[] result = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(member.Password));

 

//获取方式1 正常获取

StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sBuilder.Append(result[i].ToString("x2"));
}
member.Password = sBuilder.ToString();

 

//获取方式2  乱码

//member.Password = Encoding.UTF8.GetString(result);

C#
巫威的主页 巫威 | 初学一级 | 园豆:172
提问于:2015-05-10 23:01
< >
分享
所有回答(2)
0

ToString("X2") 为C#中的字符串格式控制符

X为     十六进制 
2为     每次都是两位数

比如   0x0A ,若没有2,就只会输出0xA 
假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A。 

 

两者的本质是不一样的。。

幻天芒 | 园豆:37175 (高人七级) | 2015-05-11 09:14
0

方式1是将byte[]转化为对应的十六进制字符串形式,最终的结果字符一定限定在0~F的范围内。

方式2是将byte[]按UTF8编解码规则解析为字符串,两者根本不是在干同一件事

BoyTNT | 园豆:202 (菜鸟二级) | 2016-11-28 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册