一个ushort的数据,怎么转成byte[]?
转成了byte[]后 怎么转回来?我的代码
            //测试的testNum1
           ushort  testNum1=34212;
          
           //测试的testByte 
           byte[] testByte = new byte[2];           //将testNum1拆开放进包里面
           testByte[0] = (byte)((0xff00 & testNum1) >> 8);
           testByte[1] = (byte)(0xff & testNum1);
           
           //在网上看到的这一句,不知道有何意义,请知道的朋友说明一下
           Array.Reverse(testByte);           //将testByte 转回成ushort
           ushort test = BitConverter.ToUInt16(testByte, 0);

解决方案 »

  1.   

    BitConverter.GetByte(testNum1)即可...搞什么位移是多此一举...Array.Reverse用于转换Little Endian和Big Endian...参考这个帖子...http://topic.csdn.net/u/20110920/09/0514f6b1-5d15-491c-92d5-bbe0991f9bb5.html
      

  2.   


    数字转换为字节数组...
    byte[] ba = BitConverter.GetBytes(s);
    但是 我这个byte[]数组在我要用的地方,前面是有其他的东西的。这个ushort要放在byte[]数组的 第5~6位之间。
    不用移位的话,那我还得创建一个临时的数组,把ushort的数据丢到临时的数组里面之后,再来放到这个总的byte[]数组的 第5~6位之间,也比较麻烦的说。
    为什么一定要用Array.Reverse 这个byte[]还原出来的 ushort才是对的......
      

  3.   

    一点也不麻烦...GetBytes生成的本来就是临时的,CopyTo到目标数组即可...至于Little Endian和Big Endian,是不同平台的数据顺序标准,计算机基础知识...去google吧...
      

  4.   

    其实吧,内存操作这破事.
    指针最好用.
    所以你的项目没啥特殊要求.
    直接unsafe吧.
      

  5.   

    当然unsafe编码不注意的话你程序不做任何提示直接挂掉的可能性也增大.
    自己权衡下吧.
      

  6.   

    fix(byte * ptr=&data[0])
    {
     ushort * put=(ushort *) ptr;
    *put //即 ;
    }
      

  7.   

              ushort testNum1 = 34212;           byte[] testByte = new byte[2];
                 //将testNum1  转为数组testByte 
               testByte = BitConverter.GetBytes(CRC16Num);          //将testByte转回到ushort
               ushort test = BitConverter.ToUInt16(testByte, 0);这样写 倒是对的,反而加了Array.Reverse就有问题了。
      

  8.   

    加了Array.Reverse有问题,说明通信的平台字节序一致,比如两边都是PC...既然是测试不能说明问题,你需要按实际生产环境测试,比如下位机是单片机你就得用单片机测试...如果生产环境平台字节序一致,当然没必要转换...
      

  9.   


    最后一问,前面问题基本解决。 //将testNum1 转为数组testByte  
      testByte = BitConverter.GetBytes(CRC16Num);如何来区别这个testByte  数组里面的高位和低位?   CRC16Num=15387;
      //将testNum1 转为数组testByte  
      testByte = BitConverter.GetBytes(CRC16Num);testByte[0] 为27
    testByte[1] 为60
    哪个是低位?
    哪个是高位?新手一个,还望大侠指点迷津!
      

  10.   

    不是让你去google吗,哪个是低位哪个是高位由平台决定...Little Endian高位在后,Big Endian高位在前,PC是Little Endian,自己判断...