什么是低字节高字位,高字节低字位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是低字节高字位,高字节低字位相关的知识,希望对你有一定的参考价值。

首先什么是高字节要清楚,一个字有两个字节组成,规定数字名称大的字节是高字节。比如W0是一个字,它是由WB0和WB1两个字节组成,这时候要寻址w0字中第0比特位,你就要知道一个W0字中16个比特位存储器是从哪里开始的(也就是第0位在哪),规定从数字大的字节比特位优先开始,那么W0字中的比特位优先顺序就是从WB1.0比特位开始~WB1.7~WB0.0~WB0.7结束。你要寻W0字第6位,就是WB1.5;你要寻W0字第12位,就是WB0.3。这就是高字节低字位的意思。不知道讲明白没有。不管是什么类型的数据,都是同样的寻址原则,是计算机运算的方式,记住就好了。
再给新人补充点最最基础的,计算机靠存储信息来完成计算,存储的方式是比特位,一个比特位(bit)可以表示两种状态(计算机用二进制的0或1分别表示这两种状态),
8个比特位放在一组时就叫一个字节(Bety)(可以表示2的8次方种状态),
16个比特位放一起时叫一个字(Word,一般简写为W)(可以表示2的16次方种状态),
32个比特放一起时就叫一个双字(DW)(可以表示2的32次方种状态)。看到这里你可能还是不明白计算机为什么要这样存储,其实计算机不是真的会“计算”,它是“靠死记硬背”告诉你答案的,3乘9等于多少你马上就能答出来,是因为你会背99乘法口诀,35乘21你就不能马上得出答案,但是你如果会背9999乘法口诀你也可以马上得出答案,这就是计算机的计算能力的本质,就是存储位的多少决定了他的计算能力高低。这样梳理下来,关于存储方面的疑问是不是都解开了呢?希望对你有用。
参考技术A 以S7300/400 PLC为例:
一、假设MW0是一个字。那么MB0就是高字节,MB1就是低字节。

低字节高位就是指MB1.B7; 高字节低位就是MB0.B0
二、如果是一个双字,高低字节排列如下:

一个WORD分为2个BYTE,每个BYTE里有BIT0到BIT7 8个BOOL位。

主机序与网络字节序解析

网络数据流的地址:先发出的数据是低地址,后发出的是高地址

TCP/IP协议规定,网络数据流采用大端(big endian)字节序,低地址存高字节序,高地址低字节序(网络字节序)

        主机字节序一般采用小端(little endian)存储,低地址存低字节序,高地址存高字节序

例子:

int num=0x0102 01为高字节,02为低字节序
小端存储 02 01
大端存储 01 02

ntohs() 将一个无符号短整形数从网络字节顺序转换为主机字节顺序。
  printf("%ld ",(eitP.tcp->th_dport)); 25834(网络字节序)
  printf("%ld ",ntohs(eitP.tcp->th_dport)); 60004(主机字节序)
htonl()表示将32位的主机字节顺序转化为32位的网络字节顺序

其他函数相类似,不一一举例了

 

以上是关于什么是低字节高字位,高字节低字位的主要内容,如果未能解决你的问题,请参考以下文章

python 数据的基本类型

字节字位比特的概念和关系转发

字节字位比特,这四者之间的关系

字节、kb、mb等单位,是怎样换算的?

做MODBUS RTU通讯时,如何读取设备寄存器40001中的浮点数

设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为 如何计算的?