我不知道为什么,但是当你做下一件事你将永远不会像原始字节数组一样:
var b = new byte[] {252, 2, 56, 8, 9};
var g = System.Text.Encoding.ASCII.GetChars(b);
var f = System.Text.Encoding.ASCII.GetBytes(g);
如果您将运行此代码,您将看到b!= f,为什么?! 有没有办法将字节转换为字符然后返回字节并获得与原始字节数组相同的颜色?
答案 0 :(得分:3)
字节值可以 0到255 。
当字节值> ,然后是
的结果System.Text.Encoding.ASCII.GetChars()
总是'?',其值 63
因此,
System.Text.Encoding.ASCII.GetBytes()
对于初始字节值>的人来说,结果总是得到 63 (错误值) 127 强>
如果您需要TABLE ASCII -II,那么您可以执行以下操作
var b = new byte[] { 252, 2, 56, 8, 9 };
//another encoding
var e = Encoding.GetEncoding("437");
//252 inside the mentioned table is ⁿ and now you have it
var g = e.GetString(b);
//now you can get the byte value 252
var f = e.GetBytes(g);
您可以阅读的类似帖子
答案 1 :(得分:0)
为什么不使用字符?
var b = new byte[] {252, 2, 56, 8, 9};
var g = new char[b.Length];
var f = new byte[g.Length]; // can also be b.Length, doens't really matter
for (int i = 0; i < b.Length; i++)
{
g[i] = Convert.ToChar(b[i]);
}
for (int i = 0; i < f.Length; i++)
{
f[i] = Convert.ToByte(g[i]);
}
答案 2 :(得分:-2)
唯一的区别是第一个字节:252。因为ascii char是1字节的有符号字符,它的值范围是-128到127.实际上你的输入是不正确的。签名的char不能是252。