求救一简单小问题 我有四个CString 类型的变量,str1,str2,str3,str4我想将这四个数做异或操作,该怎样操作呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先用atoi转成整形再做异或操作即可 CString str5;uint n1,n2,n3,n4,n5;sscanf(str1,"%d",&n1);sscanf(str2,"%d",&n2);sscanf(str3,"%d",&n3);sscanf(str4,"%d",&n4);n5=n1^n2^n3^n4;str5.Format("%d",n5); 我觉得你得一位一位的取出来进行异或,用CString的GetAt来取出其中的一位,异或完了用SetAt放回 楼上的,试了,不行啊!jack,你说的是先转二进制? CString str;//先转化成字符串char sz[]在转化成BYTE[]然后再转回"\xAB\xCD"->"ABCD"->0xAB、0xCD,然后逆序 回复zoedwin、oldforest:刚刚说的有些小错误,重新描述如下:CString抑或字符串有以下两种:1、16进制,"\xAB\xCD\x31"此种字符串直接memcpy到BYTE数组,相应的值即为0xAB、0xCD、0x312、普通,"abcd31"此种字符串转化为BYTE数组可通过以下方法:int Char2Hex(char c){ if ('0'<=c && c<='9') { return c-'0'; } else if ('a'<=c && c<='f') { return c-'a'+10; } else if ('A'<=c && c<='F') { return c-'A'+10; } else { return -1; }}bool Str2Byte(BYTE *pData, const char *szMsg, int nMsgLen){ int hi, lo; for (int i=0; i<nMsgLen/2; i++) { hi=Char2Hex(szMsg[i*2]); lo=Char2Hex(szMsg[i*2+1]); if (hi<0 || lo<0) { return false; } pData[i]=(hi<<4)+lo; } return true;}调用Str2Byte即可另:To zoedwin:你的另一个帖子还是关了吧 上一楼的"另:To zoedwin:你的另一个帖子还是关了吧",是我看错了,抱歉 没关系,我想再问一下Str2Byte(BYTE *pData, const char *szMsg, int nMsgLen)这三个参数怎样传啊? 如果是16进制的话,这样:CString str5;uint n1,n2,n3,n4,n5;sscanf(str1,"%X",&n1);sscanf(str2,"%X",&n2);sscanf(str3,"%X",&n3);sscanf(str4,"%X",&n4);n5=n1^n2^n3^n4;str5.Format("%X",n5); 谢谢楼上的各位,还有一个小问题,例如我拿到了一个十六进制数:E7,我想先要个E,再取ASCII值,再取7的ASCII值,问题是我怎样把E7拆开呢??给方法也行!谢谢! 如:char szSrc[]="abcdef"则转为BYTE b[3]即可Str2Byte(b, szSrc, strlen(szSrc)); 例如BYTE b=0xE7;int hi = b&0xF0, lo = b & 0x0F; 高四位 hi = (b&0xF0)>> 4; BYTE btDest = 0xE7;BYTE btHigh = (btDest & 0xF0) >> 4;BYTE btLow = btDest & 0x0F; 这样取值后怎样取ASCII码值呢? 数字E的ascII码值就是字符'E'吧 刚刚发现了一个问题,BYTE btDest = 0xE7;BYTE btHigh = (btDest & 0xF0) >> 4;BYTE btLow = btDest & 0x0F;这个取值好像没有区分大小写啊! 取十六进制E7分别对应的ASCII码值,再把ASCII值转十六进制,我的最终问题就这样! “再把ASCII值转十六进制”这个说法本身就是错误的,数字本身没有什么几进制,只有显示出来后才有几进制之说,你所谓的转十六进制,是要把它转换成字符显示出来吗? 所以请再帮一下忙,E7怎样拆开再取ASCII码值,谢谢啦! UINT nDest = 0xE7;CString strHex;strHex.Format("%02X",nDest); 你这样只能取E7,取不到E的ascii码值和7的ascii码值啊! UINT nDest = 0xE;CString strHex;strHex.Format("%1X",nDest); 虽然问题还没解决,但还是谢谢各位的帮忙,尤其是oldforest!谢谢! UINT nDest = 0xE7; UINT nHigh = (nDest & 0xF0) >> 4; UINT nLow = nDest & 0x0F; char szStr1[2],szStr2[2]; BYTE cAsc1,cAsc2; sprintf(szStr1,"%1X",nHigh); sprintf(szStr2,"%1X",nLow); sscanf(szStr1,"%c",&cAsc1); sscanf(szStr2,"%c",&cAsc2); 为什么不能置顶呢? 怎样编程来改变文档的类容和后缀名 MFC做控件,属性的持久化问题,高手请进!! 想做一个dll_one包含另一个dll_two! 小问题,散分。 我需要将打印结果存放到文件中去,怎么办?每人知道吗? 如何在ATL中把自己定义的接口中的方法导出呢?多谢各位。 关于VC运行C程序问题 对话框中的SetIcon 有什么作用? 用DAO操作DBASE数据库怎么不能Edit啊 获取文件所有者(owner)的问题 程序打包后在没装VC的机子上运行不了
uint n1,n2,n3,n4,n5;
sscanf(str1,"%d",&n1);
sscanf(str2,"%d",&n2);
sscanf(str3,"%d",&n3);
sscanf(str4,"%d",&n4);
n5=n1^n2^n3^n4;
str5.Format("%d",n5);
用CString的GetAt来取出其中的一位,异或完了用SetAt放回
//先转化成字符串
char sz[]
在转化成BYTE[]
然后再转回"\xAB\xCD"->"ABCD"->0xAB、0xCD,
然后逆序
刚刚说的有些小错误,重新描述如下:
CString抑或字符串有以下两种:
1、16进制,"\xAB\xCD\x31"
此种字符串直接memcpy到BYTE数组,相应的值即为0xAB、0xCD、0x31
2、普通,"abcd31"
此种字符串转化为BYTE数组可通过以下方法:
int Char2Hex(char c)
{
if ('0'<=c && c<='9')
{
return c-'0';
}
else if ('a'<=c && c<='f')
{
return c-'a'+10;
}
else if ('A'<=c && c<='F')
{
return c-'A'+10;
}
else
{
return -1;
}
}bool Str2Byte(BYTE *pData, const char *szMsg, int nMsgLen)
{
int hi, lo;
for (int i=0; i<nMsgLen/2; i++)
{
hi=Char2Hex(szMsg[i*2]);
lo=Char2Hex(szMsg[i*2+1]);
if (hi<0 || lo<0)
{
return false;
}
pData[i]=(hi<<4)+lo;
}
return true;
}调用Str2Byte即可另:To zoedwin:你的另一个帖子还是关了吧
Str2Byte(BYTE *pData, const char *szMsg, int nMsgLen)
这三个参数怎样传啊?
CString str5;
uint n1,n2,n3,n4,n5;
sscanf(str1,"%X",&n1);
sscanf(str2,"%X",&n2);
sscanf(str3,"%X",&n3);
sscanf(str4,"%X",&n4);
n5=n1^n2^n3^n4;
str5.Format("%X",n5);
如:
char szSrc[]="abcdef"
则转为BYTE b[3]即可Str2Byte(b, szSrc, strlen(szSrc));
例如BYTE b=0xE7;
int hi = b&0xF0, lo = b & 0x0F;
BYTE btHigh = (btDest & 0xF0) >> 4;
BYTE btLow = btDest & 0x0F;
BYTE btDest = 0xE7;
BYTE btHigh = (btDest & 0xF0) >> 4;
BYTE btLow = btDest & 0x0F;这个取值好像没有区分大小写啊!
CString strHex;
strHex.Format("%02X",nDest);
CString strHex;
strHex.Format("%1X",nDest);
UINT nHigh = (nDest & 0xF0) >> 4;
UINT nLow = nDest & 0x0F;
char szStr1[2],szStr2[2];
BYTE cAsc1,cAsc2;
sprintf(szStr1,"%1X",nHigh);
sprintf(szStr2,"%1X",nLow);
sscanf(szStr1,"%c",&cAsc1);
sscanf(szStr2,"%c",&cAsc2);