大家好!
我有个装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 :(
我有个装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 :(
/*---------实现语句-----------*/
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); }
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; //在文本框显示
{ 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; //在文本框显示
}