今天发现了一段代码,就扫描了下,感觉应该挺简单的,但是结果却让我和失望,感觉有的本质的东西还是没有掌握,下为代码: static void Main(string[] args)
        {
            //写入数字            string filePath;
            Console.WriteLine("请输入需要创建的二进制文件路径(包括文件名)");
            filePath = Console.ReadLine();            FileStream fileStream = new FileStream(filePath, FileMode.Create);
            BinaryWriter writer = new BinaryWriter(fileStream);            for (int index = 0; index < 20; index++)
            {
                writer.Write(index);
            }            Console.WriteLine("写入完毕");
            writer.Close();
            fileStream.Close();
        }
我输入的测试用例为  F:test.txt;下面的代码是对刚刚写的文件进行读操作:
static void Main(string[] args)
        {
            //读入数据
            Console.WriteLine("请输入文件名:");
            string filePath = Console.ReadLine();
            if (!File.Exists(filePath))
            {
                Console.WriteLine("文件不存在。");
            }
            else
            {
                FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                BinaryReader reader = new BinaryReader(fileStream);
                try
                {
                    while (true)
                    {
                        Console.WriteLine(reader.ReadInt16());
                    }
                }
                catch (EndOfStreamException)
                {
                    Console.WriteLine("已经到文件尾部了");
                }
                finally
                {
                    reader.Close();
                    fileStream.Close();
                    Console.ReadKey();
                }
按照我的猜想,答案应该为:0 0 0 1 0 2 0 3....0 19 
但是结果很吃惊: 
可能关键字不对吧,总是找不到相关的资料,所以来坛子里问问。

解决方案 »

  1.   

    这里我写是写 int32类型的数据  ,读取得是按照 int16类型读取的。
      

  2.   

    按照我的理解 以整数1为列,占4个字节,也就是Int32类型的二进制排列方式如下:00000000 00000000 00000000 00000001  如果我按每2个字节进行读的话,结果就是00000000 00000000    和 00000000 00000001 了,即:0 1 ,但是结果却是 1  0 
      

  3.   

    按照我的理解 以整数1为列,占4个字节,也就是Int32类型的二进制排列方式如下:00000000 00000000 00000000 00000001   如果我按每2个字节进行读的话,结果就是00000000 00000000 和 00000000 00000001 了,即:0 1 ,但是结果却是 1 0  
     
    还望请教。
      

  4.   

    高低位的顺序取决于OS的Unicode的格式。以下内容来自MSDNUnicodeEncoding 与 Windows 代码页 1200(Little-Endian 字节顺序)和 1201(Big-Endian 字节顺序)对应。 
    编码器可以使用 Big-Endian 字节顺序(从最高有效字节开始),也可以使用 Little-Endian 字节顺序(从最低有效字节开始)。
    例如,大写拉丁字母 A(码位为 U+0041)的序列化结果(十六进制)如下所示:
    Big-endian 字节顺序:00 00 00 41
    Little-endian 字节顺序:41 00 00 00
    通常,使用本机字节顺序存储 Unicode 字符的效率更高。
    例如,在 Little-endian 平台(如 Intel 计算机)上最好使用 Little-endian 字节顺序。
    或者, UnicodeEncoding 对象提供一个前导码(即一个字节数组),可以将它作为编码过程中所产生的字节序列的前缀。 
      

  5.   

    0x12345678在内存的存储方式为 78 56 34 12,是反序储存
    例如int32 i=1 ,占4位,在内存中表示为 01 00 00 00
    使用blockcopy转换为int16[2],则第一个元素为 01 00,第二个元素为 00 00 
    输出则变为1,0
      

  6.   

    嗯 在intel X86系列的机器上是这样的。谢谢了
      

  7.   

    数据在内存的排列方式与字节序有关
    参考资料:http://baike.baidu.com/view/2194385.htm
    http://my.oschina.net/u/147624/blog/32460http://hi.baidu.com/liyunfeng6666/item/cb676eac0d86a436030a4ddb