#include <iostream>
using namespace std;typedef struct tagNetMessage {
unsigned int nMessageType;
unsigned int nConnectionId; 
unsigned int nSequenceNum; 
unsigned int nLength; 
unsigned char byMessageBody[20]; 
} NETMESSAGE;int main()
{
NETMESSAGE pMsg;
pMsg.nMessageType = 1111;
pMsg.nSequenceNum =2222;
pMsg.nLength = 12345; char cMsg[8];
cMsg[0] = cMsg[1] = 0x7E;
cMsg[2] = (char)((pMsg.nLength + 6)>>8);
cMsg[3] = (unsigned char)(pMsg.nLength + 6);
cMsg[4] = (unsigned char)(pMsg.nSequenceNum>>8);
cMsg[5] = (unsigned char)(pMsg.nSequenceNum);
cMsg[6] = (unsigned char)(pMsg.nMessageType>>8);
cMsg[7] = (unsigned char)(pMsg.nMessageType);}
----------------------------------------------
如下代码
cMsg[2] = (char)((pMsg.nLength + 6)>>8); //buf(2) = (MsgData.MessageLen + 6) / 256
cMsg[3] = (unsigned char)(pMsg.nLength + 6);
cMsg[4] = (unsigned char)(pMsg.nSequenceNum>>8); //buf(4) = MsgData.SequenceNum / 256 
cMsg[5] = (unsigned char)(pMsg.nSequenceNum);
cMsg[6] = (unsigned char)(pMsg.nMessageType>>8); //buf(6) = MsgData.MessageType / 256
cMsg[7] = (unsigned char)(pMsg.nMessageType);
注释后面的是我写的,对吗?其他的Unsigned char,怎么转换为VB代码?

解决方案 »

  1.   

    VB 是自动转换类型的。如果已经将 buf() 定义为 Byte 型:
    type NETMESSAGE
    nMessageType As Long
    nConnectionId As Long
    nSequenceNum As Long
    nLength As Long 
    byMessageBody(19) As Byte
    End typeDim MsgData As NETMESSAGE
    ......
    buf(0) = &H7E
    buf(1) = &H7E
    buf(2) = (MsgData.MessageLen + 6)/256
    buf(3) = MsgData.MessageLen + 6
    buf(4) = MsgData.SequenceNum / 256 
    buf(5) = MsgData.SequenceNum
    buf(6) = MsgData.MessageType / 256
    buf(7) = MsgData.MessageType
      

  2.   

    of123() ( ) 信誉:125 ---------------------------
    我写的和你写的一样,但是不正确。假如SequenceNum=2222
    错误的地方如下:
    1.
    buf(4) = MsgData.SequenceNum / 256 
    得到buf(4) = 9,实际上正确的值为 8, 所以我感觉应该这样写
    buf(4) = MsgData.SequenceNum \ 256 或者用CopyMemory取得倒数第2Byte
    2.
    cMsg[5] = (unsigned char)(pMsg.nSequenceNum);
    需要得到2222的最的低位一个Byte(&HAE),然后求取补码,得到的正确值应该为-82。
    而buf(5) = MsgData.SequenceNum 得到buf(5)=0。------------------------------------------------------------
    现在就需要解决第2个错误,就变成了下面这个问题,连接如下。
    http://community.csdn.net/Expert/topic/4739/4739151.xml?temp=.2818872
    现在需要进行位运算,不知道VB如何实现位运算。
    如何判断某个数X的某位是0还是1?如何求取X的补码?假如下面
    Dim btTemp as Byte
    btTemp = &HAE&HAE = 174(十进制)= 10101110 (二进制)= -82(十进制补码)望高手解答,谢谢!
      

  3.   

    我记得好象unsigned char,占1位,取值范围是0-255
    而VB里面的BYTE范围是多少?
      

  4.   

    yinweihong() ( ) 信誉:137  2006-05-09 16:28:00  得分: 0  
       我记得好象unsigned char,占1位,取值范围是0-255
    而VB里面的BYTE范围是多少?
    --------------------------
    正确,我只知道Byte占用1字节,范围就不知道了。
      
     
      

  5.   

    http://www.xbeat.net/vbspeed/  里面有个shiftleft shiftright还有速度比较
      

  6.   

    搞定了
    用 CopyMemory拆分,后使用and &H80之类的语句