如何进行十六进制发送? 我用函数写的串口通讯,现在要向下位机发送十六进制数据,比如发送:"112233445566AAFF"该怎么实现!要按十六进制发送,请赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 字符串? 那就Format("%x",xxx) ; 将输入的数据(ASCII)编码转换成HEX编码就可以了,如你举例:112233445566AAFF可以分解为:11,22,33,44,55,66,aa,ff等字节,可以用sscanf()将其转换成HEX值:char buf[]="11,22,33,44,55,66,aa,ff";int dat[16];sscanf(buf,"%x,%x,%x,%x,%x,%x,%x,%x",&dat[0],&dat[1],...);BYTE bdt[16];bdt[0]=BYTE(0xff&dat[0]);bdt[1]=BYTE(0xff&dat[1]);...将bdt发送出去就可以了,声明一点:计算机可以处理的数据只有BIN,HEX,DEC等都是为了方便阅读才使用的。 下面是我想串口发送命令的一个写串口的封装和调用///////////////////////////////////////////////////////////////////////////int WriteCom(HANDLE hComm, BYTE Outbuff[], int size, int bWrite[]){ DWORD nBytesWrite,endtime,lrc; static OVERLAPPED ol; DWORD dwErrorMask,dwError; COMSTAT comstat; ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); ol.Offset=0; ol.OffsetHigh=0; ol.hEvent=NULL; ///标识事件,数据传送完成时,将它设为信号状态 ClearCommError(hComm,&dwErrorMask,&comstat); if(!WriteFile(hComm,Outbuff,size,&nBytesWrite,&ol)) { if((lrc=GetLastError())==ERROR_IO_PENDING) { endtime=GetTickCount()+1000; while(!GetOverlappedResult(hComm,&ol,&nBytesWrite,FALSE)) { dwError=GetLastError(); if(GetTickCount()>endtime) { AfxMessageBox("写串口时间过长,目前串口发送缓冲区中的数据数目为空"); break; } if(dwError=ERROR_IO_INCOMPLETE) continue; //未完全读完时的正常返回结果 else { // 发生错误,尝试恢复! ClearCommError(hComm,&dwError,&comstat); break; } } } } FlushFileBuffers(hComm); PurgeComm(hComm,PURGE_TXCLEAR); ///? bWrite=0; return 1;}调用:int BWRITE[2];BYTE m_OutBuff[10]={0xeb,0x90,0xeb,0x90,0x00,0x08,0x00,0x15,m_Crc};int SIZE=sizeof(m_OutBuff);WriteCom(m_hCom,m_OutBuff,SIZE,BWRITE); m_hCom是打开的串口的句柄 菜鸟求助,实现本机的tcp/ip端口管理控制的相关函数?~ 有人熟悉PLC和RS232的串口通讯吗? 求界面优秀的源代码,mp3啦,什么系统啦都可以 如何将指定位置的bmp图片像素值保存到一个二维数组中? dsoframer open(url) url含有中文字符,,请问怎么解决??? 请问关于ListCtrl的问题 在写入文本文件时如何进行行控制? 请问名字空间是什么?(namespace),什么作用?why? 高分请教汉字转换为unicode码的程序 关于windows各个系统的登录(gina)问题 连接Oracle数据库问题 关于GDI+
112233445566AAFF可以分解为:
11,22,33,44,55,66,aa,ff等字节,可以用sscanf()将其转换成HEX值:
char buf[]="11,22,33,44,55,66,aa,ff";
int dat[16];
sscanf(buf,"%x,%x,%x,%x,%x,%x,%x,%x",&dat[0],&dat[1],...);
BYTE bdt[16];
bdt[0]=BYTE(0xff&dat[0]);
bdt[1]=BYTE(0xff&dat[1]);
...
将bdt发送出去就可以了,
声明一点:计算机可以处理的数据只有BIN,HEX,DEC等都是为了方便阅读才使用的。
///////////////////////////////////////////////////////////////////////////
int WriteCom(HANDLE hComm, BYTE Outbuff[], int size, int bWrite[])
{
DWORD nBytesWrite,endtime,lrc;
static OVERLAPPED ol;
DWORD dwErrorMask,dwError;
COMSTAT comstat;
ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ol.Offset=0;
ol.OffsetHigh=0;
ol.hEvent=NULL; ///标识事件,数据传送完成时,将它设为信号状态
ClearCommError(hComm,&dwErrorMask,&comstat);
if(!WriteFile(hComm,Outbuff,size,&nBytesWrite,&ol))
{
if((lrc=GetLastError())==ERROR_IO_PENDING)
{
endtime=GetTickCount()+1000;
while(!GetOverlappedResult(hComm,&ol,&nBytesWrite,FALSE))
{
dwError=GetLastError();
if(GetTickCount()>endtime)
{
AfxMessageBox("写串口时间过长,目前串口发送缓冲区中的数据数目为空");
break;
}
if(dwError=ERROR_IO_INCOMPLETE)
continue; //未完全读完时的正常返回结果
else
{
// 发生错误,尝试恢复!
ClearCommError(hComm,&dwError,&comstat);
break;
}
}
}
}
FlushFileBuffers(hComm);
PurgeComm(hComm,PURGE_TXCLEAR); ///?
bWrite=0;
return 1;
}调用:
int BWRITE[2];
BYTE m_OutBuff[10]={0xeb,0x90,0xeb,0x90,0x00,0x08,0x00,0x15,m_Crc};
int SIZE=sizeof(m_OutBuff);
WriteCom(m_hCom,m_OutBuff,SIZE,BWRITE);
m_hCom是打开的串口的句柄