如:一个数据包结构:包头:0x01,
数据内容:有两个byte:一个低位:0x02,一个高位:0x03(合成一个数,这个不太了解)
包尾:0x04请问那个,数据内容中的:两个byte,第一个是低位,第二个是高位,如果要合成一个真正的int数据,是怎么运行的?
如,数据内容:byte[] a = new byte[2]; a[0]=0xfd,a[1]=0x05;这个a数组byte,怎么合成一个数呢?哩面所说的低位,与高低,倒底是什么概念。我的理解:8位二制进数以内为底,否则为高位??(那如位非常多,这就不可以单单用高位来形容来吧?)

解决方案 »

  1.   

    Byte:一个字节
    Long : 四个字节
    每个byte由8个位(bit)组成
    如二进制0010 0*2^3+0*2^2+0*2^1+1*2^0
      

  2.   

    byte[] a = new byte[2]; a[0]=0xfd,a[1]=0x05;内存中保存顺序就是
    fd 05
    低位和高位分别表示16进制的高低位,换10进制容易理解,97,高位就是9,低位就是7。16进制也是这个意思。但是内存中存储,分大端内存和小端内存(详见连接),所以高位未必一定在下标小的位置,大小位置可能会在不同系统是反过来的。这个需要事先了解好上位机和下位机的内存。转换是用系统方法:
    BitConverter.ToUInt16(a);
    BitConverter类可以把常用的值类型转换为对应的字节数组,也可以逆向的转回来,你仔细看看这个类的成员函数。
    http://msdn.microsoft.com/zh-cn/library/system.bitconverter(VS.80).aspx
      

  3.   


    假如:a数组(byte[]),长度为2,第一个索引值对应的是低位:0xfd,第二个索引值对应的是高位:0x05,那如果该两位byte组合成一个int,那应该是这个表达:(a[1]<<8)+a[0],是否这样?还是说,直接a[0]+a[1]。byte[] a = new byte[]{0xfd,0x05};(因为int值在数据通讯里,都为byte,要传输,就得转成byte,所以一些大于byte.MaxValue的,都只能通过,右移8位,转成,byte范围内容的值,在接收方,再左移回8位,加相加,就可以还原,不知道是否都是这样处理的?)
      

  4.   

    整数是从高字节到底字节排列
    byte[] b= new byte[] { 0x04, 0xB1 };
    Array.Reverse(byte_array);
    ushort us = BitConverter.ToUInt16(b, 0);
    ((int)b[0])<<8  ((int)b[1]