如果传送一个4个长度的数组,传送的时候是b(0)在前 还是b(3)在前?想问大家 诸如一个long型的数 值假若这里取1000,16进制就是4D2,因为long型占4个字节
我把每个long型的数都转成4位的byte数组 通过sock网络传送。我是用 CopyMemory byte4(0), lng, 4把一个long型的数 转成数组的 转后byte4(0)=232 byte4(1)=3 byte4(2)=0 byte4(3)=0
我想问的是 我是否可以直接把byte4()这个数组传送给对方 或应该进行如下的转换 传送
dim tepByte(3) as byte
tepByte(0)=byte4(3)
tepByte(1)=byte4(2)
tepByte(2)=byte4(1)
tepByte(3)=byte4(0)
然后传送tepByte()?只所以这样问 是因为我发现我在接收另外一个程序通过winsock传给我的数据流,其中前4个字节代表一个数  我就需要
    bLength(0) = byRemain(3)
    bLength(1) = byRemain(2)
    bLength(2) = byRemain(1)
    bLength(3) = byRemain(0)    CopyMemory lLength, bLength(0), 4 然后iLength才是真正的他 传给我的数
哪我传送的时候也要低,高字节转一下再传么〉?

解决方案 »

  1.   

    Windows/Dos:在内存中低字节在前,即低地址;高字节在后,即高地址;
    Unix:与Windows/Dos恰恰相反。在内存中低字节在后,即高地址;高字节在前,即低地址;      &H41424344&-->44(D),43(C),42(B),41(A)
          
    所以,必须按规定放置。至于传送则尽量按顺序,否则,必须在接收后,重调顺序处理。
    可用Lset语句处理。
      

  2.   

    我做了个实验
    我vb接收对方(java写的)传过了的字节流,内容是4个无符号整数,接收的时候是高字节在前,即by(0)=0 by(1)=0 by(2)=0 by(3)=32
    我如果用vb接收(vb 写的)就是vb之前相互通信 就是先收到低字节,by(0)=32 by(1)=0 by(2)=0 by(3)=0
    我不懂java  不知道java  和vb 通信就不一样
      

  3.   

    哦,lyllxfly 已经说过了。
    Windows/Dos:在内存中低字节在前;
    Unix:与Windows/Dos恰恰相反。在内存中低字节在后。Java 采用了此格式。这是存储格式问题。你必须清楚发送方和接收方的发送格式,也就是需要有一个统一的协议。这与从内存中取出后如何处理有关。