数据通讯中的语术:低位,高位,是什么概念。

Jave.Lin 2010-09-05 10:37:49
如:

一个数据包结构:

包头:0x01,
数据内容:有两个byte:一个低位:0x02,一个高位:0x03(合成一个数,这个不太了解)
包尾:0x04

请问那个,数据内容中的:两个byte,第一个是低位,第二个是高位,如果要合成一个真正的int数据,是怎么运行的?


如,数据内容:byte[] a = new byte[2]; a[0]=0xfd,a[1]=0x05;

这个a数组byte,怎么合成一个数呢?

哩面所说的低位,与高低,倒底是什么概念。

我的理解:8位二制进数以内为底,否则为高位??(那如位非常多,这就不可以单单用高位来形容来吧?)
...全文
3506 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jave.Lin 2010-11-19
  • 打赏
  • 举报
回复
结一下旧贴。

高、底位,都只是术语意思,现在对这数据处理也熟悉了。

只是一般我们把数据类型大的,转在数据类型比较小(这大、小说的是占容量大小)的情况下使用,就要自己手动转成对应的数据类型来保存了。
wuyq11 2010-09-05
  • 打赏
  • 举报
回复
整数是从高字节到底字节排列
byte[] b= new byte[] { 0x04, 0xB1 };
Array.Reverse(byte_array);
ushort us = BitConverter.ToUInt16(b, 0);
((int)b[0])<<8 ((int)b[1]
jointan 2010-09-05
  • 打赏
  • 举报
回复
对,就是(a[1]<<8)+a[0]
Jave.Lin 2010-09-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jointan 的回复:]
展开一个二进制数时,权位大的是高位

比如0110=0*2^3+1*2^2+1*2^1+0*2^0

权位依次为3,2,1,0

3相对于2来说,是高位
[/Quote]

假如:a数组(byte[]),长度为2,第一个索引值对应的是低位:0xfd,第二个索引值对应的是高位:0x05,那如果该两位byte组合成一个int,那应该是这个表达:(a[1]<<8)+a[0],是否这样?还是说,直接a[0]+a[1]。

byte[] a = new byte[]{0xfd,0x05};

(因为int值在数据通讯里,都为byte,要传输,就得转成byte,所以一些大于byte.MaxValue的,都只能通过,右移8位,转成,byte范围内容的值,在接收方,再左移回8位,加相加,就可以还原,不知道是否都是这样处理的?)
兔子-顾问 2010-09-05
  • 打赏
  • 举报
回复
byte[] a = new byte[2]; a[0]=0xfd,a[1]=0x05;

内存中保存顺序就是
fd 05
低位和高位分别表示16进制的高低位,换10进制容易理解,97,高位就是9,低位就是7。16进制也是这个意思。但是内存中存储,分大端内存和小端内存(详见连接),所以高位未必一定在下标小的位置,大小位置可能会在不同系统是反过来的。这个需要事先了解好上位机和下位机的内存。

转换是用系统方法:
BitConverter.ToUInt16(a);
BitConverter类可以把常用的值类型转换为对应的字节数组,也可以逆向的转回来,你仔细看看这个类的成员函数。
http://msdn.microsoft.com/zh-cn/library/system.bitconverter(VS.80).aspx
wuyq11 2010-09-05
  • 打赏
  • 举报
回复
Byte:一个字节
Long : 四个字节
每个byte由8个位(bit)组成
如二进制0010 0*2^3+0*2^2+0*2^1+1*2^0
jointan 2010-09-05
  • 打赏
  • 举报
回复
展开一个二进制数时,权位大的是高位

比如0110=0*2^3+1*2^2+1*2^1+0*2^0

权位依次为3,2,1,0

3相对于2来说,是高位



110,545

社区成员

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

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

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