字符串和DWORD类型之间如何相互转换?

xychzh 2011-03-10 02:46:58
char chData[] = "A布武天下A"
DWORD dwData = ????

如何相互转换呢?
我要将一个字符串转化成DWORD类型,然后加密成一段密文,然后再解密,最后把他还原为字符串.(每4个字符加密一个密文)
请问如何互转??

昨天发了个贴子,有人说这样:
DWORD dwData = (DWORD)chData;
我当时测试了一下,发现没问题,现在我才发现,这完全错了,dwData得到的是指针地址,而不是字符串,难怪我相同的字符串每次得到的值都不一样.

好像:DWORD dwData = *(DWORD*)chData; 也不行.
...全文
1558 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2011-03-10
  • 打赏
  • 举报
回复
手机不好用,多写了*sizeof(TCHAR),strlen得到的就是字节长度
辰岡墨竹 2011-03-10
  • 打赏
  • 举报
回复
int i=0;
memcpy(&dw, ch 4*i, 4);
注意最好先保证字符串(strlen(ch)*sizeof(TCHAR))%4==0否则最后最好先补上\0再拷贝
xychzh 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bokutake 的回复:]
呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&,比如&aa,字符串用ch+i*4
[/Quote]

恩,我刚刚就少加了个&

这样是吧:???
char chData[4] = "A布"
DWORD dwData = 0;
memcpy(&dwData, (DWORD*)chData, 4);

char chOut[4]
memcpy(chOut, (char*)&dwData, 4);
cout << chOut << endl;
gkun_521 2011-03-10
  • 打赏
  • 举报
回复
不好意思,没看清楚,那4楼的可以~
xychzh 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 moorsf 的回复:]
C/C++ code
#include <stdio.h>
typedef unsigned int DWORD;
int main()
{
char cha[]="A布武天下A";
char chb[12];
DWORD aa , i;

for( i = 0 ; i < 3 ; i++ )
{
aa=*(DWORD ……
[/Quote]

这,还有点乱。。
xychzh 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gkun_521 的回复:]
LZ的想法很强大。。。
DWORD 4个字节
char chData[] = "A布武天下A" 10个字节。。
如果字符串能直接转换成DWORD,那么还需要什么压缩算法呢?
所以你可以找个压缩算法,将一个字符串压缩到4个字节中...
[/Quote]

你没看清楚,我说的是“每4个字符加密一个密文”显然,"A布武天下A"是要分组加密的
辰岡墨竹 2011-03-10
  • 打赏
  • 举报
回复
呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&,比如&aa,字符串用ch+i*4
gkun_521 2011-03-10
  • 打赏
  • 举报
回复
LZ的想法很强大。。。
DWORD 4个字节
char chData[] = "A布武天下A" 10个字节。。
如果字符串能直接转换成DWORD,那么还需要什么压缩算法呢?
所以你可以找个压缩算法,将一个字符串压缩到4个字节中...
辰岡墨竹 2011-03-10
  • 打赏
  • 举报
回复
为什要做这种转换呢?有什么意义呢?DWORD是32位整数,任意长的字符串转过来用得有个规则吧,你也没说,难道是CRC-32
moorsf 2011-03-10
  • 打赏
  • 举报
回复
#include <stdio.h>
typedef unsigned int DWORD;
int main()
{
char cha[]="A布武天下A";
char chb[12];
DWORD aa , i;

for( i = 0 ; i < 3 ; i++ )
{
aa=*(DWORD *)(cha+i*sizeof(DWORD));
*(DWORD *)(chb+i*sizeof(DWORD))=aa;
}
printf("%s\n" , chb);

return 0;
}

你运行看这不是可以么
xychzh 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
那你需要一个字符一个字符的进行处理,做个运算
[/Quote]

能讲下如何处理么?
moorsf 2011-03-10
  • 打赏
  • 举报
回复
这种转换肯定是可以的
你说不行,那就是你的做法不对。
bdmh 2011-03-10
  • 打赏
  • 举报
回复
那你需要一个字符一个字符的进行处理,做个运算

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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