字符串如何 2 合 1 ? 请教高手

tomPeakz 2002-06-06 03:16:38
LPSTR lpStr = _T("ABCD5678");
DWORD dwResult ;
大家知道,dwResult占有4个字节的字符空间,如00 00 00 00
我现在需要把00 00 00 00 -> AB CD 56 78
就是让dwResult里面存储这些内容。
俺折腾了一会没弄出来,急着用。
谁写段?100分!

...全文
51 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomPeakz 2002-06-06
  • 打赏
  • 举报
回复
我根据各位的意见写成的代码,测试通过:
INT HexChToInt(CHAR chTemp);
DWORD dwResult = 0;
CHAR * pChResult = (CHAR*)(&dwResult);
CHAR * pChar = lpStr;

for(int i = 0; i < 4 ; i++)
{
int m,n,nResult;
CHAR chTemp = pChar[i * 2];
m = HexChToInt(chTemp);
chTemp = pChar[i * 2 + 1];
n = HexChToInt(chTemp);
nResult = m * 16 + n ;
memcpy(pChResult + i,&nResult,sizeof(CHAR));

}
INT HexChToInt(CHAR chTemp)
{
INT n;
switch(chTemp)
{
case 'A':
case 'a':
n = 10;break;
case 'B':
case 'b':
n = 11;break;
case 'C':
case 'c':
n = 12;break;
case 'D':
case 'd':
n = 13;break;
case 'E':
case 'e':
n = 14;break;
case 'F':
case 'f':
n = 15;break;
default:
n = _ttoi(&chTemp);
}
return n;
}
linfei2707 2002-06-06
  • 打赏
  • 举报
回复

AB--> a = 10*16+11;
CD--> b = ;
56--> c =;
78-> d = ;

DWORD dwResult = MAKELONG(MAKEWORD(a, b), MAKEWORD(c, d));

这个一定行,我试过了
longyii 2002-06-06
  • 打赏
  • 举报
回复
0xFFFFFFFF>>4就是2的28次方啊!!
0xFFFFFFFF>>8就是2的24次方啊
依次类推,就是为了计算方便,不用调用数学函数
linfei2707 2002-06-06
  • 打赏
  • 举报
回复
写错了

DWORD dwResult = MAKELONG(MAKEWORD(a, b), MAKEWORD(c, d));
tomPeakz 2002-06-06
  • 打赏
  • 举报
回复
to longyii(宁静.致远)
麻烦写一段吧,兄弟我没看懂。:(
最怕的就是 << 、 >> 马上就昏了。
如果成功,100分送上。
pcman1990 2002-06-06
  • 打赏
  • 举报
回复
to shan_hy(), tomPeakz(马中赤兔):
举例说明用MAKEWORD和MAKELONG来做而已。
pcman1990 2002-06-06
  • 打赏
  • 举报
回复
to shan_hy(), tomPeakz(马中赤兔):
举例说明用MAKEWORD和MAKELONG来做而已。
longyii 2002-06-06
  • 打赏
  • 举报
回复
不好意思,刚才写错了,应该是0xFFFFFFFF
这个过程可以用循环实现,
虽然笨了点,但肯定能实现
tomPeakz 2002-06-06
  • 打赏
  • 举报
回复
to shan_hy()
存储顺序不对的。
linfei2707 2002-06-06
  • 打赏
  • 举报
回复
longyii(宁静.致远) 说得
将lpStr中的字符一个一个取出来,转换成数字,如A->10,B->11...
eg:
AB--> a = 10*16+11;
CD--> b = ;
56--> c =;
78-> d = ;

DWORD dwResult = MAKELONG(MAKEWORD(d, c), MAKEWORD(d, a));

shan_hy 2002-06-06
  • 打赏
  • 举报
回复
to pcman1990(pcman)
你还不如写 dwResult = 0xABCD5678;
Anco 2002-06-06
  • 打赏
  • 举报
回复
tomPeakz 2002-06-06
  • 打赏
  • 举报
回复
to pcman1990(pcman)
忘了说明了,我的lpStr是随时变化的。
longyii 2002-06-06
  • 打赏
  • 举报
回复
将lpStr中的字符一个一个取出来,转换成数字,如A->10,B->11...
then dwResult=10*(0xFFFF>>4)+11*(0xFFFF>>8)+12*(0xFFFF>>12)+...
+7*(0xFFFF>>28)+8
longyii 2002-06-06
  • 打赏
  • 举报
回复
将lpStr中的字符一个一个取出来,转换成数字,如A->10,B->11...
then dwResult=10*(0xFFFF>>4)+11*(0xFFFF>>8)+12*(0xFFFF>>12)+...
+7*(0xFFFF>>28)+8
pcman1990 2002-06-06
  • 打赏
  • 举报
回复
DWORD dwResult = MAKELONG(MAKEWORD(0x78, 0x56), MAKEWORD(0xCD, 0xAB));
pcman1990 2002-06-06
  • 打赏
  • 举报
回复
BYTE by[4];
by[0] = 0x78;
by[1] = 0x56;
by[2] = 0xCD;
by[3] = 0xAB;
dwResult = MAKELONG(MAKEWORD(by[0], by[1]), MAKEWORD(by[2], by[3]));
shan_hy 2002-06-06
  • 打赏
  • 举报
回复
LPSTR lpStr = _T("ABCD5678");
DWORD dwResult = 0;
char *m;
m = ((char*)(&dwResult));
sprintf(m,"%s",lpStr);
//这样lpStr中的内容就存在dwResult中了
char *n;
n = ((char*)(&dwResult));
//即可取出

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧