请问如何把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)再转换成字符!
[其他解释]
这多简单的问题。
[其他解释]
因为不懂,所以~~~何必这样打击我
[其他解释]
是这样的吗?
ml[3] = (unsigned char)((_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);
刚才写快了。少了一个引号!
[其他解释]
//编辑框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);
}
[其他解释]
//编辑框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);
}
[其他解释]
不明白你最后 要什么效果??
[其他解释]
一共两个编辑框 第一个的默认值是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的序号 ;
[其他解释]
万分感谢
[其他解释]
刚格式化了win8,重装的win7,刚上来,嘿嘿。
[其他解释]
兄弟 结贴 给分~!!!!
[其他解释]
谢谢。虽然根本看不懂 !!