首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教怎么把0x和41合并为0x41

2012-12-17 
请问如何把0x和41合并为0x41?//代码如下//m_claddr是一个编辑框IDC_EDT_ADDR的变量,CString m_claddr//编

请问如何把0x和41合并为0x41?

//代码如下
//m_claddr是一个编辑框IDC_EDT_ADDR的变量,CString m_claddr;
//编辑框已经初始化为 SetDlgItemText(IDC_EDT_ADDR,_T("41"));
//希望让ml[3]在值的修改后变为0x41

unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};
ml[3] = (unsigned char)(_T("0x"))+(unsigned char)m_claddr.GetBuffer();

//求大侠帮忙~~~谢谢

[最优解释]

        CString m_claddr, strRecv;
unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};
//**************** 设置编辑框的值为41 ***************//
GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("41"));

//********* 按键后改变ml[3]的值为0x41, 其中自己设置按键产生的消息响应 *********//
GetDlgItem(IDC_EDIT1)->GetWindowTextW(m_claddr);
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP,0,m_claddr,-1,NULL,0,NULL,NULL);
ptr = new char[len+1];
memset(ptr,0,len+1);
WideCharToMultiByte(CP_ACP,0,m_claddr,-1,ptr,len+1,NULL,NULL);
#else
ptr =new char[m_claddr.GetAllocLength()+1];
sprintf(ptr,_T("%s"),m_claddr);
#endif
int num = atoi(ptr);
if(num >100)
return ;
ml[3] = (num/10)*0x10 + (num%10); 

//***************** 相加 ***************//
int Sum =0;
for(int i=0;i<7;i++)
{  
Sum += ml[i];
}
ml[6] =Sum;

[其他解释]
(_T("0x"))+m_claddr)再转换成字符!
[其他解释]
这多简单的问题。
[其他解释]
引用:
这多简单的问题。
因为不懂,所以~~~何必这样打击我
[其他解释]
引用:
(_T("0x"))+m_claddr)再转换成字符!

是这样的吗?

ml[3] = (unsigned char)((_T("0x"))+m_claddr);

可是报了这样的错~~~是我哪里写错了吗?

[其他解释]
引用:
(_T("0x"))+m_claddr)再转换成字符!

//是这样的吗?
 
ml[3] = (unsigned char)((_T("0x"))+m_claddr);
 
//可是报了这样的错~~~

//无法从“ATL::CStringT<BaseType,StringTraits>”转换为“unsigned char”

//是我哪里写错了吗?


[其他解释]

m_claddr.Empty();
GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);
m_claddr = _T("0x) + m_claddr;
SetDlgItemTextW(IDC_EDT_ADDR, m_claddr);

[其他解释]

m_claddr.Empty();
GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);
m_claddr = _T("0x") + m_claddr;
SetDlgItemTextW(IDC_EDT_ADDR, m_claddr);


刚才写快了。少了一个引号!
[其他解释]
引用:
C/C++ code?12345m_claddr.Empty();GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);m_claddr = _T("0x") + m_claddr;SetDlgItemTextW(IDC_EDT_ADDR, m_claddr);



刚才写快了。少了一个引号!


//编辑框1的值我写的是41,我刚刚这样写了下,为什么结果会是
//==========================
//eb 90 4 40 1 0 45  
//==========================
//而不是eb 90 4 41 1 0 46呢

//代码如下
unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};
m_claddr.Empty();
GetDlgItem(IDC_EDIT1)->GetWindowTextW(m_claddr);
m_claddr = _T("0x") + m_claddr;
ml[3] = (unsigned char)(m_claddr.GetBuffer());
for(int i=0;i<7;i++)
{  
   CString s; 
   s.Format(_T("%x "),ml[i]);  
   strRecv += s;  
   SetDlgItemText(IDC_EDIT2,strRecv);
}

[其他解释]
引用:
引用:C/C++ code?12345m_claddr.Empty();GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);m_claddr = _T("0x") + m_claddr;SetDlgItemTextW(IDC_EDT_ADDR, m_claddr);

刚才写快了。……

//编辑框1的值我写的是41,我刚刚这样写了下,为什么结果会是
//==========================
//eb 90 4 40 1 0 45  
//==========================
//而不是eb 90 4 <span style="color: rgb(255, 0, 0);">41</span> 1 0 46呢
 
//代码如下
unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};
m_claddr.Empty();
GetDlgItem(IDC_EDIT1)->GetWindowTextW(m_claddr);
m_claddr = _T("0x") + m_claddr;
ml[3] = (unsigned char)(m_claddr.GetBuffer());
ml[6] =ml[2] + ml[3] + ml[4] + ml[5];
for(int i=0;i<7;i++)
{  
   CString s; 
   s.Format(_T("%x "),ml[i]);  
   strRecv += s;  
   SetDlgItemText(IDC_EDIT2,strRecv);
}

[其他解释]
引用:
引用:引用:C/C++ code?12345m_claddr.Empty();GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);m_claddr = _T("0x") + m_claddr;SetDlgItemTextW(IDC_EDT_ADDR,……


不明白你最后 要什么效果??
[其他解释]
引用:
引用:引用:引用:C/C++ code?12345m_claddr.Empty();GetDlgItem(IDC_EDT_ADDR)->GetWindowTextW(m_claddr);m_claddr = _T("0x") + m_claddr;SetDlgIt……

一共两个编辑框 第一个的默认值是41 然后一按按钮 ml数组的ml[3]的值就变成0x41,然后最后一位等于他前面4位的相加  最后输出 整个数组到编辑框2    就是这样子。。。谢谢你了
[其他解释]
该回复于2012-11-22 08:44:17被管理员删除
[其他解释]
引用:
学习中。。。

[其他解释]

CString m_claddr, strRecv;
unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};
// 设置编辑框的值为41
//GetDlgItem(IDC_EDIT1)->SetWindowTextW(_T("41"));

// 按键后改变ml[3]的值为0x41, 其中自己设置按键产生的消息响应;
//GetDlgItem(IDC_EDIT1)->GetWindowTextW(m_claddr);
m_claddr = _T("41");


char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP,0,m_claddr,-1,NULL,0,NULL,NULL);
ptr = new char[len+1];
memset(ptr,0,len+1);
WideCharToMultiByte(CP_ACP,0,m_claddr,-1,ptr,len+1,NULL,NULL);
#else
ptr =new char[m_claddr.GetAllocLength()+1];
sprintf(ptr,_T("%s"),m_claddr);
#endif


int num = atoi(ptr);
if(num >100)
return ;
ml[3] = (num/10)*0x10 + (num%10); 

// 相加;
int Sum =0;
for(int i=0;i<7;i++)
{  
Sum += ml[i];
}
ml[6] =Sum;



注意 ml数组里面只能保存大于等于0,小于256的整数;而不是你想象的字符串 0x41;
而ml[3] = 0x41; 其值 是字符A 的asicII的序号 ; 
[其他解释]
引用:
C/C++ code?12345678910111213141516171819202122232425262728293031        CString m_claddr, strRecv;    unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};    //**************** 设置……
万分感谢
[其他解释]
引用:
引用:
引用:C/C++ code?12345678910111213141516171819202122232425262728293031        CString m_claddr, strRecv;    unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x……

刚格式化了win8,重装的win7,刚上来,嘿嘿。
[其他解释]
引用:
引用:C/C++ code?12345678910111213141516171819202122232425262728293031        CString m_claddr, strRecv;    unsigned char ml[20] = {0xEB,0x90,0x04,0x00,0x01,0x00,0x46};  ……

 兄弟 结贴 给分~!!!!
[其他解释]
谢谢。虽然根本看不懂 !! 

热点排行