问个好菜的问题~~~基础太差了

hujiiori 2004-11-19 09:11:46
一个16位整数存在一个2个字节长的byte数组里,高位在前低位在后,已知它是有符号数,我怎么得出它的值,好像要对2取余什么的,怎么弄?如果是无符号数呢?
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
letp520 2004-11-20
  • 打赏
  • 举报
回复
i know to
leonlux 2004-11-20
  • 打赏
  • 举报
回复
byte[] bt = new byte[2];
bt[0] = 255;//高位
bt[1] = 255;//低位
short a = (short)((bt[0]<<8) + bt[1]);
Console.WriteLine(a);
hivak47 2004-11-20
  • 打赏
  • 举报
回复
楼主看一下源码,补码,反码的相互转换就可以了。
一半乐事 2004-11-20
  • 打赏
  • 举报
回复
比如这个:
0000 0000 0100 0010
值就是
2^1+2^6
至于符号位,要看怎么规定的,0代表正还是1代表正,有时还有双符号位00代表正11代表负
canyqf 2004-11-19
  • 打赏
  • 举报
回复
dim b() as byte = {1,2}
dim s as int16
dim p as IntPtr
p = System.Runtime.InteropServices.Marshal.AllocHGlobal(2)
System.Runtime.InteropServices.Marshal.WriteByte(p, b(1))
System.Runtime.InteropServices.Marshal.WriteByte(p, 1, b(0))
s = System.Runtime.InteropServices.Marshal.ReadInt16(p)
System.Runtime.InteropServices.Marshal.FreeHGlobal(p)
roarlion 2004-11-19
  • 打赏
  • 举报
回复
如果是c语言就比较好处理
用指针
这里面我就用char 代替byte了,用16位编译器
char s[2]={高位,低位};
char *p;
int i;/* 16位编译器下,int i占两个字节*/
p=(char *)&i;
*p=s[1];*(p+1)=s[0];

i的值就是你所要的值
无符号情况下,只要改变i的定义 unsigned int i;
burnyxu 2004-11-19
  • 打赏
  • 举报
回复
无符号就用
uint16
burnyxu 2004-11-19
  • 打赏
  • 举报
回复
说一下
int16 x=.....;
byte[] b=new byte[2];
byte[0]=Convert.tobyte((x>>8)&&0x00FF);
byte[1]=Convert.tobyte(x&&0x00FF);
实验一下把,大概就是这样了.

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧