新手求救,负数如何显示?
大家好!我有个装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])); --------------------编程问答--------------------
--------------------编程问答-------------------- 我测试了一下,显示65535
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);
}
--------------------编程问答-------------------- 可是short不是表示16位数据吗?我的理解是0x0001代表1,0xffff代表-1啊! --------------------编程问答--------------------
/*----------变量定义---------*/
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; //在文本框显示
static void Main(string[] args)--------------------编程问答-------------------- 可能我没说明白,我想把ffff显示成-1! --------------------编程问答-------------------- 6楼,已经是-1了 --------------------编程问答-------------------- 谢谢楼上的回答,我回去试试。可我还是想不明白:
{
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);
}
在计算机中数据都是二进制存储,所以有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; //在文本框显示
}
在计算机原理里,向右位移操作,有符号和无符号是有区别的,前面补0还是补1不一样。 --------------------编程问答--------------------
mark。
补充:.NET技术 , C#