读书人

VC++环境下串口接收十六进制数据单字节

发布时间: 2012-05-12 15:39:31 作者: rapoo

VC++环境下串口接收十六进制数据单字节,如何合并为双字节十六进制数
例如:
char a[10];
a[1]=0x02;
a[2]=0x58;
我想得到一个数为:0x0258,怎么做?
应该是移位在加一下是吧?请达人给个代码,谢谢!

void CTestDlg::OnComm()
{
// TODO: Add your control notification handler code here


VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{BYTE bt=*(char*)(rxdata+k); //字符型

if(m_Hex.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strEditRXData+=strtemp; //加入接收编辑框对应字符串
求救~~~~怎样添加呢?



[解决办法]
short sValue;
char a[10];
a[1]=0x02;
a[2]=0x58;

sValue = a[1]*256 + a[2];

strtemp.Format("%X ",sValue ); //0x0258
[解决办法]
unsigned short i = (a[1]<<8)|a[2];
[解决办法]

C/C++ code
BYTE btData[] = { ... };WORD *pwData = (WORD *)btData;
[解决办法]
很 与或非 逻辑运算也可以达到要求, 用 乘除也可以,、方法很多;
[解决办法]
void CTestDlg::OnComm()
{
// TODO: Add your control notification handler code here

unsined short HexValue[1024];//加这句
int i;//加这句

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
////////////////////////////////////////////////////////////////////
i=0;
for(k=0;k<len;k+=2)
{
HexValue[i]=(unsigned short)rxdata[k]*256+rxdata[k+1];
i++;
}
///////////////////////////////////////////////////////////////////

for(k=0;k<len;k++) //将数组转换为Cstring型变量
{ BYTE bt=*(char*)(rxdata+k); //字符型

if(m_Hex.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strEditRXData+=strtemp;
[解决办法]
C/C++ code
void HEX2ASC(BYTE Hex, TCHAR uChar[3]){  //0-F 转换成 '0'-'F' #define BIN2TXT(x) (((x) > 9) ? ((x)-10+_T('A')) : ((x)+_T('0')))   uChar[0] = BIN2TXT(Hex>>4);//高四位  uChar[1] = BIN2TXT(Hex&0x0F);//低四位  uChar[2] = 0;//结束}BYTE ASC2HEX(const TCHAR uChar[3]){  BYTE Hex;#define ASSERTISHEXASC(x) ASSERT(((x)>=_T('0') && (x)<=_T('9'))\  ||((x)>=_T('A') && (x)<=_T('F'))\  ||((x)>=_T('a') && (x)<=_T('f')))  ASSERTISHEXASC(uChar[0]);//判断数据是否合法 '0'-'9' 'A'-'F' 'a'-'f'  ASSERTISHEXASC(uChar[1]);//判断数据是否合法 '0'-'9' 'A'-'F' 'a'-'f'#define TXT2BIN(x) ((x)>=_T('0') && (x)<=_T('9'))? ((x)-_T('0')):\  (((x)>=_T('A') && (x)<=_T('F'))? ((x)-_T('A')+10) : ((x)-_T('a')+10))  Hex = (TXT2BIN(uChar[0]))<<4; //高四位  Hex |= (TXT2BIN(uChar[1])); //低四位  return Hex;} 


[解决办法]
你现在这些代码有什么问题
我看你还是把问题问得具体一点
就你现在的问题其实大家已经解答的很好了
可是我觉得你好像不知道自己的问题是什么

读书人网 >VC/MFC

热点推荐