#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代码?
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代码?
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
我写的和你写的一样,但是不正确。假如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(十进制补码)望高手解答,谢谢!
而VB里面的BYTE范围是多少?
我记得好象unsigned char,占1位,取值范围是0-255
而VB里面的BYTE范围是多少?
--------------------------
正确,我只知道Byte占用1字节,范围就不知道了。
用 CopyMemory拆分,后使用and &H80之类的语句