二进制从字符串读取

时间:2017-01-10 17:55:51

标签: c#

我正在写小解码器。用户输入程序应解码的字符串(十六进制)。

我的问题是int值与输入的值不同,因此我不知道在阅读二进制文件后我应该如何前进。我错过了如何阅读二进制文件的观点吗?

string input = "0802";

byte[] arr = Encoding.Default.GetBytes(input);

using (MemoryStream stream = new MemoryStream(arr))
{
    using (BinaryReader reader = new BinaryReader(stream))
    {
        int a = reader.ReadInt32();
        Console.WriteLine(a);
        //output: 842020912
    }
}

2 个答案:

答案 0 :(得分:0)

这是对的。您从字符串中读取4个字节,因此它们被解释为int的4个字节。

如果你检查"不正确"的十六进制值。数字842020912它会给你0x32303830并读取每个字节,因为ASCII给"2080"

当您将值读取为little-endian时,顺序会反转。

答案 1 :(得分:0)

你正在以艰难的方式去做。我使用Bytes但可以很容易地修改1in16或int32。 :

            string input = "0802";
            List<byte> bytes = new List<byte>();

            for (int i = 0; i < input.Length; i += 2)
            {
                bytes.Add(byte.Parse(input.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));
            }