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

时间:2021-07-07 15:23:29
char chData[] = "A布武天下A"
DWORD dwData = ????

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

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

好像:DWORD dwData = *(DWORD*)chData; 也不行.

13 个解决方案

#1


那你需要一个字符一个字符的进行处理,做个运算

#2


这种转换肯定是可以的
你说不行,那就是你的做法不对。

#3


引用 1 楼 bdmh 的回复:
那你需要一个字符一个字符的进行处理,做个运算


能讲下如何处理么?

#4


#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;
}

你运行看这不是可以么

#5


为什要做这种转换呢?有什么意义呢?DWORD是32位整数,任意长的字符串转过来用得有个规则吧,你也没说,难道是CRC-32

#6


LZ的想法很强大。。。
DWORD 4个字节 
char chData[] = "A布武天下A" 10个字节。。
如果字符串能直接转换成DWORD,那么还需要什么压缩算法呢?
所以你可以找个压缩算法,将一个字符串压缩到4个字节中...

#7


呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&,比如&aa,字符串用ch+i*4

#8


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


你没看清楚,我说的是“每4个字符加密一个密文”显然,"A布武天下A"是要分组加密的

#9


引用 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 ……


这,还有点乱。。

#10


不好意思,没看清楚,那4楼的可以~

#11


引用 7 楼 bokutake 的回复:
呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&amp;,比如&amp;aa,字符串用ch+i*4


恩,我刚刚就少加了个&

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

char chOut[4]
memcpy(chOut, (char*)&dwData, 4);
cout << chOut << endl;

#12


int i=0;
memcpy(&dw, ch 4*i, 4);
注意最好先保证字符串(strlen(ch)*sizeof(TCHAR))%4==0否则最后最好先补上\0再拷贝

#13


手机不好用,多写了*sizeof(TCHAR),strlen得到的就是字节长度

#1


那你需要一个字符一个字符的进行处理,做个运算

#2


这种转换肯定是可以的
你说不行,那就是你的做法不对。

#3


引用 1 楼 bdmh 的回复:
那你需要一个字符一个字符的进行处理,做个运算


能讲下如何处理么?

#4


#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;
}

你运行看这不是可以么

#5


为什要做这种转换呢?有什么意义呢?DWORD是32位整数,任意长的字符串转过来用得有个规则吧,你也没说,难道是CRC-32

#6


LZ的想法很强大。。。
DWORD 4个字节 
char chData[] = "A布武天下A" 10个字节。。
如果字符串能直接转换成DWORD,那么还需要什么压缩算法呢?
所以你可以找个压缩算法,将一个字符串压缩到4个字节中...

#7


呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&,比如&aa,字符串用ch+i*4

#8


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


你没看清楚,我说的是“每4个字符加密一个密文”显然,"A布武天下A"是要分组加密的

#9


引用 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 ……


这,还有点乱。。

#10


不好意思,没看清楚,那4楼的可以~

#11


引用 7 楼 bokutake 的回复:
呵呵,没看到一句话,用memcpy拷贝就可以了,注意DWORD参数要带&amp;,比如&amp;aa,字符串用ch+i*4


恩,我刚刚就少加了个&

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

char chOut[4]
memcpy(chOut, (char*)&dwData, 4);
cout << chOut << endl;

#12


int i=0;
memcpy(&dw, ch 4*i, 4);
注意最好先保证字符串(strlen(ch)*sizeof(TCHAR))%4==0否则最后最好先补上\0再拷贝

#13


手机不好用,多写了*sizeof(TCHAR),strlen得到的就是字节长度