大家好!
我有个装2字节的byte型数组,从以太网收到两个字节的数据后,把它们拼成一个字,
然后在Form上的文本框显示.现在的问题是:只能显示整数,无法显示负数,请各位高手指教?
实现语句大致如下:/*----------变量定义---------*/
private byte[] Buffer = new byte[2]; //定义接收的字节数组
short disCurValue;
string disCur;
/*---------实现语句-----------*/
disCurValue = (short)((((short)Buffer[1] << 8) & 0xff00) | ((short)Buffer[0]));
disCur = string.Format("{0:D}", disCurValue);
txtCollect.Text = disCur;   //在文本框显示如果那两个字节都是FF的话,显示65535,而不是-1      :(

解决方案 »

  1.   

    short disCurValueshort 最大只能表示32767,怎么表示你的65535?用ushort或者int类型吧string disCur;
    /*---------实现语句-----------*/
    disCurValue = (ushort)((((short)Buffer[1] << 8) & 0xff00) | ((short)Buffer[0]));
      

  2.   


            static void Main(string[] args)
            {            /*----------变量定义---------*/
                byte[] Buffer = new byte[2]; //定义接收的字节数组
                Buffer[0] = 0xFF;
                Buffer[1] = 0xFF;
                ushort disCurValue;
                string disCur;
                /*---------实现语句-----------*/
                disCurValue = (ushort)((((ushort)Buffer[1] << 8) & 0xff00) | ((ushort)Buffer[0]));            //disCurValue = (short)Buffer[1] << 8;
                disCur = string.Format("{0:D}", disCurValue);
                Console.Write(disCur);        }
      

  3.   

    我测试了一下,显示65535            /*----------变量定义---------*/
                byte b1 = Convert.ToByte("255");
                byte b2 = Convert.ToByte("255");
                byte[] Buffer = new byte[2] { b1, b2 }; //定义接收的字节数组            int disCurValue;
                string disCur;
                /*---------实现语句-----------*/
                // disCurValue = (short)((((short)Buffer[1] << 8) & 0xff00) | ((short)Buffer[0]));
                disCurValue = Convert.ToInt32(Buffer[1].ToString("X2") + Buffer[0].ToString("X2"), 16);
                disCur = string.Format("{0:D}", disCurValue);
                textBox6.Text = disCur; //在文本框显示
      

  4.   

    可是short不是表示16位数据吗?我的理解是0x0001代表1,0xffff代表-1啊!
      

  5.   

            static void Main(string[] args)
            {            byte[] Buffer = new byte[2];
                Buffer[0] = 0xFF;
                Buffer[1] = 0xFF;
                short disCurValue;  //  当然不能定义成无符号的
                string disCur;
                disCurValue = (short)((((ushort)Buffer[1] << 8) & 0xff00) | ((ushort)Buffer[0]));   //  这里要转成有符号的
                /*  中间过程要无符号才能成功,而最终要转成有符号的才行. */            disCur = string.Format("{0:D}", disCurValue);
                Console.Write(disCur);        }
      

  6.   

    可能我没说明白,我想把ffff显示成-1!
      

  7.   

    谢谢楼上的回答,我回去试试。可我还是想不明白:
    在计算机中数据都是二进制存储,所以有short和ushort型,就是为了人看着方便。
    16位数据,short表示-32768-+32767,ushort表示0-65535,
    如果0xffff用有符号short表示就该是-1啊!而用无符号ushort就该是65535啊!为什莫还要先转成无符号数,再转成有符号数才行呢?
      

  8.   

    尝试了一下,其实什么麻烦都没有......你自己搞复杂了:
    private byte[] Buffer = new byte[2]; //定义接收的字节数组        private void Form1_Click(object sender, EventArgs e)
            {
                /*----------变量定义---------*/
                short disCurValue;
                string disCur;
                /*---------实现语句-----------*/
                Buffer[0] = 0xFF;
                Buffer[1] = 0xFF;
                disCurValue = (short)(Buffer[1] << 8 | Buffer[0]);
                disCur = string.Format("{0:D}", disCurValue);
                textBox1.Text=disCur;    //在文本框显示
            }