一个判断当前系统是大端还是小端拍历的函数,小端则返回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发送数据时都是打包发送的(头部一般都是固定的结构体),这个问题必须要注意
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)