字节大小端

字节大小端,第1张

例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中;0x22放在高地址中,即0x0011中。小端模式,刚好相反

一个判断当前系统是大端还是小端拍历的函数,小端则返回1:

以上函数,若在小端系统下,其字节序为,b[0]中存储00000001,后三个字节依次存储00000000,大端系统下反之

在iOS开发中,苹果已经为我们定义好了一套用于大小端转换的宏定义:

NTOHL,network to host,L、S、LL分别对应long、short、long long

HTONL,反之

大小端转换原理如下:

假设一个short类型的数字:0x1122,那么其二进制形式为:00010001 00100010

首先,取出第一个字节,右移八位:

然后,取出第二个字节,左移八位:

最后,按位袭物搜或,至此,大小端转换完蚂拆成:

 字的大小端转换 

        CODE  SEGMENT

              ASSUME    CS:CODE

        BUF1  DW        1,2,3,4,5,6,7,8,9,0

           N  EQU       ($-BUF1)/2

        BUF2  DW        N DUP(?)

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES

              MOV       CX,N

              LEA       SI,BUF1

              LEA       DI,BUF2

              CLD

         @1:

              LODSW

              XCHG      AH,AL

              STOSW

              LOOP      @1

              LEA       SI,BUF2

              MOV       CX,N

              CLD

         @2:

              LODSW

              CALL      DSPAX

              LOOP      @2

     山辩塌         MOV       AH,4CH

            逗圆  INT       21H

 ===============================

       DSPAX  PROC      NEAR

    灶物          PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSHF

              XOR       CX,CX

              MOV       BX,10

    @DSPAX1:

              XOR       DX,DX

              DIV       BX

              INC       CX

              OR        DX,30H

              PUSH      DX

              CMP       AX,0

              JNE       @DSPAX1

              MOV       AH,2

   @DISPAX2:

              POP       DX

              INT       21H

              LOOP      @DISPAX2

              MOV       DL,32

              INT       21H

              POPF

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       DSPAX  ENDP

================================               

        CODE  ENDS

              END       START

我也搞网络编程搞好久野竖悉了,大小端这个问题倒是没有遇到过啊,我同事做Java,我做IOS都一样纤祥的,都是小端的。

建议你用抓包软件抓下包看看,还有就是注意发送时数据对齐问题,不同的系统可能一样的类型长度就不一样,比如在mac系统中long型有8字节,但是在IOS、VC中就只有四个字节,一般使用颂乎socket发送数据时都是打包发送的(头部一般都是固定的结构体),这个问题必须要注意


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12375762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存