一、题目描述
编程实现两个等长的十六进制字符串的异或,如果你的程序能正确运行,就可以将如下的前面两个字符串异或成第三个字符串:
1c0111001f010100061a024b53535009181c
… after hex decoding, and when XOR’d against:
686974207468652062756c6c277320657965
… should produce:
746865206b696420646f6e277420706c6179
二、算法思想
十六进制的异或实质是二进制的异或,所以先将十六进制转为十进制,十进制的异或运算实质上就是它所对应的二进制的异或,得到十进制结果,最后将十进制转化为二进制。
三、代码
#include <stdio.h>
#include <string.h>
#include <math.h>
int char2int(char input)
{
return input>64?(input-55):(input-48);
}
int int2char( char input )
{
return input>9?(input+55):(input+48);
}
void hexstrxor( char * HexStr1, char * HexStr2, char
*result)
{
int i, length,iHexStrLenGap;
strupr(
HexStr1 );
strupr(
HexStr2 );
length=
strlen( HexStr1 );
for( i=0; i<length; i++ )
{
*(result+