当前位置:编程学习 > C#/ASP.NET >>

新手求救,负数如何显示?

大家好!
我有个装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      :( --------------------编程问答-------------------- --------------------编程问答-------------------- short disCurValue

short 最大只能表示32767,怎么表示你的65535?

用ushort或者int类型吧

string disCur;
/*---------实现语句-----------*/
disCurValue = (ushort)((((short)Buffer[1] << 8) & 0xff00) | ((short)Buffer[0])); --------------------编程问答--------------------

        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);

        }
--------------------编程问答-------------------- 我测试了一下,显示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; //在文本框显示
--------------------编程问答-------------------- 可是short不是表示16位数据吗?我的理解是0x0001代表1,0xffff代表-1啊! --------------------编程问答--------------------
        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);

        }
--------------------编程问答-------------------- 可能我没说明白,我想把ffff显示成-1! --------------------编程问答--------------------
引用 7 楼 dcbafei 的回复:
可能我没说明白,我想把ffff显示成-1!
6楼,已经是-1了 --------------------编程问答-------------------- 谢谢楼上的回答,我回去试试。可我还是想不明白:
在计算机中数据都是二进制存储,所以有short和ushort型,就是为了人看着方便。
16位数据,short表示-32768-+32767,ushort表示0-65535,
如果0xffff用有符号short表示就该是-1啊!而用无符号ushort就该是65535啊!为什莫还要先转成无符号数,再转成有符号数才行呢? --------------------编程问答-------------------- 尝试了一下,其实什么麻烦都没有......你自己搞复杂了:
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;    //在文本框显示
        }
--------------------编程问答--------------------
引用 9 楼 dcbafei 的回复:
谢谢楼上的回答,我回去试试。可我还是想不明白:
在计算机中数据都是二进制存储,所以有short和ushort型,就是为了人看着方便。
16位数据,short表示-32768-+32767,ushort表示0-65535,
如果0xffff用有符号short表示就该是-1啊!而用无符号ushort就该是65535啊!为什莫还要先转成无符号数,再转成有符号数才行呢?


在计算机原理里,向右位移操作,有符号和无符号是有区别的,前面补0还是补1不一样。 --------------------编程问答--------------------
引用 11 楼 hztltgg 的回复:
引用 9 楼 dcbafei 的回复:
谢谢楼上的回答,我回去试试。可我还是想不明白:
在计算机中数据都是二进制存储,所以有short和ushort型,就是为了人看着方便。
16位数据,short表示-32768-+32767,ushort表示0-65535,
如果0xffff用有符号short表示就该是-1啊!而用无符号ushort就该是65535啊!为什莫还要先转成无符号数,再转成有……

mark。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,