我用2,3,5这三天线与另一台点的串口相连,而我有68,CB,00,01,68,53,16这些16进制数,现在我要程序初始化后用16进制形式发送到第二台电脑,第二台电脑是用16进制接受.但是第二台电脑接受到的并不是以上那几个16进制数,而是一些其他数,我不知道是不是转化的时候把我这几个16进制数,当成了字符或int形了~~请问如何转换才是好呢??高手们可以给出具体代码吗??谢谢
调试欢乐多
unsigned char buf[10]; // or BYTE buf[10];memset(buf, 0, 10);buf[0] = 0x68;
buf[1] = 0xcb;
buf[2] = 0c01;
buf[3] = 0x68;
buf[4] = 0x53;
buf[5] = 0x16;把buf用writefile(API方式)或者控件的send发送出去就可以了
char TxData[100];
int Count = m_strSend.GetLength(); for(int i= 0;i<Count; i++)
buf[i] = m_strSend.GetAt(i); CByteArray array;
array.RemoveAll();
array.SetSize(Count);
for(i = 0;i<Count; i++)
array.SetAt(i,TxData[i]); m_Com.SetOutput(COleVariant(TxData));
// 转换2字节16进制的字符串到ASCII字符串
extern "C" BOOL pascal HextoAscii(char* sHex,char* sReply)
{
int iLen,i,j=0;
BYTE * lsData;
BYTE * lsReply; if(sHex==NULL)
{
return FALSE;
}
iLen=strlen(sHex);
if((iLen%2!=0)||(iLen>1024))
{
return FALSE;
}
if(sReply==NULL)
{
return FALSE;
} iLen=strlen(sHex);
lsData=new BYTE[iLen];
lsReply=new BYTE[iLen/2+1];
memcpy(lsData,sHex,iLen);
for(i=0;i<iLen;i+=2)
{
if(((lsData[i]>='0'&&lsData[i]<='9')||
(lsData[i]>='a'&&lsData[i]<='f')||
(lsData[i]>='A'&&lsData[i]<='F'))&&
((lsData[i+1]>='0'&&lsData[i+1]<='9')||
(lsData[i+1]>='a'&&lsData[i+1]<='f')||
(lsData[i+1]>='A'&&lsData[i+1]<='F'))
)
{
if(lsData[i]>='0'&&lsData[i]<='9')
lsReply[j] = lsData[i]-'0';
if(lsData[i]>='a'&&lsData[i]<='f')
lsReply[j] = lsData[i]-'a'+10;
if(lsData[i]>='A'&&lsData[i]<='F')
lsReply[j] = lsData[i]-'A'+10;
lsReply[j]=(lsReply[j]<<4)&0xf0;
if(lsData[i+1]>='0'&&lsData[i+1]<='9')
lsReply[j] |= lsData[i+1]-'0';
if(lsData[i+1]>='a'&&lsData[i+1]<='f')
lsReply[j] |= lsData[i+1]-'a'+10;
if(lsData[i+1]>='A'&&lsData[i+1]<='F')
lsReply[j] |= lsData[i+1]-'A'+10;
j++;
}
else
break;
}
lsReply[j]=0x00;
memcpy(sReply,lsReply,j+1);
delete lsReply;
delete lsData;
return TRUE;
}// 转换ASCII字符串到2字节16进制的字符串
extern "C" BOOL pascal AsciitoHex(char* sAsc,int iLength,char* sReply)
{
int i,j=0;
BYTE ch1,ch2;
BYTE * lsData;
BYTE * lsReply; if(sAsc==NULL)
{
return FALSE;
}
if(iLength>512)
{
return FALSE;
}
if(sReply==NULL)
{
return FALSE;
} lsData=new BYTE[iLength];
lsReply=new BYTE[iLength*2+1];
memcpy(lsData,sAsc,iLength);
for(i=0;i<iLength;i++)
{
ch1=lsData[i]>>4; //高四位
ch2=lsData[i]&0x0f; //低四位
lsReply[j++]=(ch1>=0&&ch1<=9)?(ch1+0x30):(ch1+0x37);
lsReply[j++]=(ch2>=0&&ch2<=9)?(ch2+0x30):(ch2+0x37);
}
lsReply[j]=0x00;
memcpy(sReply,lsReply,j+1);
delete lsReply;
delete lsData;
return TRUE;
}
你先把“68CB0001685316”用HextoAscii转换一下,比如HextoAscii("68CB0001685316", TxData),在把TxData发送给串口应该就可以了,另一个函数是HextoAscii的逆运算