none
吧密文转化为16进制 RRS feed

  • 问题

  • 像明文为“dd”密文为  “千瓂\窗劂駩]”这样的密文转化为16进制表示

    我用的加密算法为des


    C++
    2010年4月29日 3:34

答案

  • 您好,

    根据您的描述,您想将一个字符串转化成对应的16进制表示,如果字符串是char*形式的,其实不需要转化,每个char就是一个byte。如果是wchar_t*,则需要转化成char*,这个可以通过调用WideCharToMultiByte实现。我觉得您想做的是将字符串的16进制打印出来,就像我们用一个二进制编辑工具打开一个文本一样。你可以参考下面的代码:

    	///1. 打印普通字符串的16进制表示
    	char* str = "千瓂\\窗劂駩]";
    	int i = 0;
    	while(str[i] != '\0')
    	{
    		 printf("%x ",(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n");
    
    	///2. 打印宽(unicode)字符串的16进制表示
    	wchar_t* wstr = L"千瓂\\窗劂駩]";
    	//将宽字符串转化成普通字符串
    	WideCharToMultiByte(CP_ACP,  0,  wstr,  -1,  str,  0,  NULL,  NULL);
    	//和前面的代码一样
    	i = 0;
    	while(str[i] != '\0')
    	{
    		 printf("%x ",(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n");

    如果我的回复没什么帮助,请及时回复。
    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    2010年5月5日 7:43
    版主

全部回复

  • 您好,

    根据您的描述,您想将一个字符串转化成对应的16进制表示,如果字符串是char*形式的,其实不需要转化,每个char就是一个byte。如果是wchar_t*,则需要转化成char*,这个可以通过调用WideCharToMultiByte实现。我觉得您想做的是将字符串的16进制打印出来,就像我们用一个二进制编辑工具打开一个文本一样。你可以参考下面的代码:

    	///1. 打印普通字符串的16进制表示
    	char* str = "千瓂\\窗劂駩]";
    	int i = 0;
    	while(str[i] != '\0')
    	{
    		 printf("%x ",(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n");
    
    	///2. 打印宽(unicode)字符串的16进制表示
    	wchar_t* wstr = L"千瓂\\窗劂駩]";
    	//将宽字符串转化成普通字符串
    	WideCharToMultiByte(CP_ACP,  0,  wstr,  -1,  str,  0,  NULL,  NULL);
    	//和前面的代码一样
    	i = 0;
    	while(str[i] != '\0')
    	{
    		 printf("%x ",(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n");

    如果我的回复没什么帮助,请及时回复。
    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    2010年5月5日 7:43
    版主
  • 那又要怎样把16进制转化成字符串呢


    C++
    2010年5月5日 8:41
  • 您好,

    根据您的描述,您想将一个字符串转化成对应的16进制表示,如果字符串是char*形式的,其实不需要转化,每个char就是一个byte。如果是wchar_t*,则需要转化成char*,这个可以通过调用WideCharToMultiByte实现。我觉得您想做的是将字符串的16进制打印出来,就像我们用一个二进制编辑工具打开一个文本一样。你可以参考下面的代码:

    	///1. 打印普通字符串的16进制表示
    
    	char
    * str = "千瓂\\窗劂駩]"
    ;
    	int
     i = 0;
    	while
    (str[i] != '\0')
    	{
    		 printf("%x "
    ,(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n"
    );
    
    	///2. 打印宽(unicode)字符串的16进制表示
    
    	wchar_t
    * wstr = L"千瓂\\窗劂駩]"
    ;
    	//将宽字符串转化成普通字符串
    
    	WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, 0, NULL, NULL);
    	//和前面的代码一样
    
    	i = 0;
    	while
    (str[i] != '\0')
    	{
    		 printf("%x "
    ,(*(str+i))&0xff);
    		 ++i;
    	}
    	printf("\n"
    );
    

    如果我的回复没什么帮助,请及时回复。
    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.

    拜模啊...
    2010年5月5日 9:01
  • Hi 楼主,

    我的代码已经实现了显示16进制字符串。您可以测试一下。

    Aland Li


    Please mark the replies as answers if they help and unmark if they don't. This can be beneficial to other community members reading the thread.
    2010年5月6日 3:55
    版主