byte[]与string转换的问题

isreal0 2009-10-22 07:19:31
各位请看下如下代码,我想把十六进制数F1包装为string,然后再转回来,但是结果却得到了3F而不是F1

byte[] kk = new byte[1];
kk[0] = 0xF1;
string info = System.Text.Encoding.ASCII.GetString(kk);

byte []dd = new byte[1];
dd = System.Text.Encoding.ASCII.GetBytes(info);
string dd_16 = Convert.ToString(dd[0], 16);
Console.WriteLine("dd: " + dd_16);

请问是什么原因呢?应该如何修改呢?
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-10-22
  • 打赏
  • 举报
回复
ASCII 十进制1-127
十六进制 00-7f
public static string byteToHexStr(byte[] bytes)
{
string returnStr = "";
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
}
}
return returnStr;
}
lzsh0622 2009-10-22
  • 打赏
  • 举报
回复

byte[] kk = new byte[1];
kk[0] = 0xF1;
string info = System.Text.Encoding.ASCII.GetString(kk);
//在上一行溢出了,ASCII 字符限于最低 128 个 Unicode 字符(从 U+0000 到 U+007F)。
// 0xF1 是241 ,下面按 3F处理了
byte[] dd = new byte[1];
dd = System.Text.Encoding.ASCII.GetBytes(info);
string dd_16 = Convert.ToString(dd[0], 16);

Console.WriteLine("dd: " + dd_16);
csrwgs 2009-10-22
  • 打赏
  • 举报
回复
byte[] test1 = new byte[12];
test1[5] = 0xF1;
string p = BitConverter.ToString(test1);

string[] test3 = p.Split(new char[] { '-' });


JGood 2009-10-22
  • 打赏
  • 举报
回复
ascii码的范围是0-127。 0xF1已经超过这个范围了。不要用Ascii来编码,用其他的编码方式,如:UTF8或者System.Text.Encoding.Default来编码。
isreal0 2009-10-22
  • 打赏
  • 举报
回复
F1转换为10进制是241吧,貌似没有超过byte的0~256的范围。。。

110,566

社区成员

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

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

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