从字节数组中获取char数组,然后返回字节数组

时间:2014-03-01 18:54:14

标签: c# bytearray

我不知道为什么,但是当你做下一件事你将永远不会像原始字节数组一样:

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,为什么?! 有没有办法将字节转换为字符然后返回字节并获得与原始字节数组相同的颜色?

3 个答案:

答案 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);

您可以阅读的类似帖子

How to convert the byte 255 to a signed char in C#

How can I convert extended ascii to a System.String?

答案 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。