大侠们,帮帮我吧,在线跪求了!!!tc的编程问题

gaga16 2007-11-01 11:45:56
要输入2个32个字符长度的变量,有数字也有字母,比如a='1234addgeyy'等等

然后要对这2个变量 异或,出来一个也是32个长度的新变量

这个怎么编啊,是不是这里的32个字符,就是32位啊?我看看了,好像要先转成ascii,再转成16进制,再异或,是这样吗?
在线跪求,明天就要啊!!!!
...全文
116 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttlyfast 2007-11-02
  • 打赏
  • 举报
回复
又是作业题来的 
wankong 2007-11-02
  • 打赏
  • 举报
回复
比如'0'是00110001,'1'是00110010,这两个按位异或就是'0'^'1'结果是00000011,所有的分量不论多少位,都可以这样异或,所以只要给定了两个等长的分量,不论是什么形式,对计算机来说,只要执行如上的按位异或运算就可以了,你理解的运算没有问题,是正确的,比如32个32位数字,分别按位异或:
long int a[31],b[31]
赋值后,可以循环a[i]^b[i]32次,就是新的结果保存到c[i],这里可以认为是32个datatype a[31],b[31].
取什么datatype由需要来定,最小可以是1个BIT,最大可以是256位或者512位等等,根据加密的要求喽。
fengshl 2007-11-02
  • 打赏
  • 举报
回复
内存中的数都是01组成的,要多少进制的自己取出来格式下,就是啦
gaga16 2007-11-02
  • 打赏
  • 举报
回复
谢谢给我个例子,我研究研究,不过好像不是这样的

我可能表达的不清楚,好像就是把字符串从第一位开始,每位转换成16进制,然后异或

我不知道怎么吧 CHAR *STR1='123A' 转换成 TEMP[3] TEMP[0]=0X01,TEMP[1]=0X02,TEMP[2]=0X03,TEMP[3]=0X0A
Treazy 2007-11-02
  • 打赏
  • 举报
回复
没有用到任何库函数
只有一个printf用来调试
功能实现代码如下:

#define LEN 32

char Result[LEN];

char AsciiToBin(char Ascii)
{
char Bin = 0xFF;
switch(Ascii)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
Bin = Ascii - 0x30;
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
Bin = Ascii - 'a' + 0x0A;
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
Bin = Ascii - 'A' + 0x0A;
break;
}
return Bin;
}
void Fun(char *Data1, char *Data2)
{
int i;

for(i = 0; i < LEN; i++)
{

Result[i] = AsciiToBin(*(Data1 + i)) ^ AsciiToBin(*(Data2 + i));
printf("%x", Result[i]);
}
}

main()
{
char *s1 = "F2222222222222222222222222222222";
char *s2 = "00000000000000000000000000000000";
Fun(s1, s2);
}


gaga16 2007-11-02
  • 打赏
  • 举报
回复
没有明白,本人对位的概念很模糊啊,不好意思,看我上面的那个帖子了吗?就是那个意思

估计大家还不明白,就是
比如 CHAR *STR1= '12A '; 0X01,0X02,0X0A
CHAR *STR2= '02B '; 0X00,0X02,0X0B

然后异或 0X01^0X00 0X02^0X02 0X0A^0X0B

大家明白了吗?
wankong 2007-11-02
  • 打赏
  • 举报
回复

int main(void)
{
char a[32]="1avc";
char b[32]="2de5";
char c[32];
int i;
for(i=0;i<=31;i++)
{
if(a[i]==0)
{
c[i]=0;
break;
}
c[i]=a[i]^b[i];
}
for(i=0;i<=31;i++)
{
if((a[i]==0)&&(c[i]==0))
break;
cout<<(int)c[i]<<" ";
}
cout<<endl;
return 0;
}


比如这样,就是32个bit分量的两个密钥异或生成新的密钥。
wankong 2007-11-02
  • 打赏
  • 举报
回复
我想分量需要你再结合其他情况来确定了,我想应该是有32个部分组成的长的数字,比如32个16位,32个8位,32个4位等等。一共有两组,这两组先按照分量,按位异或,然后再用这个新的32个长度的分量来加密。
gaga16 2007-11-02
  • 打赏
  • 举报
回复
估计大家还不明白,就是
比如 CHAR *STR1='12A'; 0X01,0X02,0X0A
CHAR *STR2='02B'; 0X00,0X02,0X0B

然后异或 0X01^0X00 0X02^0X02 0X0A^0X0B

大家明白了吗?

wankong 2007-11-02
  • 打赏
  • 举报
回复
这个有点象加密方面的东西,按照题目来说是要求32个字符的,不过程序测试时候可以只是两个随意的等长字符串。
不相等的话,比较麻烦,因为可能存在后面字符为未定义字符,结果受到影响。
字符形式输出的话,可能会出现很多的无法识别字符,认为应该使用16进制比较直观。
gaga16 2007-11-02
  • 打赏
  • 举报
回复
我把整个的题目说一下吧
输入2个32个长度的分量(定长,2个密钥),进行异或生成一个32个长度的新的密钥,然后进行3des加密

我理解的是32个长度应该是32位,比如32个2,和32个0 异或就是32个2,应为是参数传入所以都是字符串形式的
不知道这样说明白了吗?感谢大家啊!!!
Treazy 2007-11-02
  • 打赏
  • 举报
回复
要输入2个32个字符长度的变量,有数字也有字母,比如a= '1234addgeyy '等等

然后要对这2个变量 异或,出来一个也是32个长度的新变量
--------------------------------------------------------------
问题1:32个字符长度,这个是特定的?还是最大长度是32,可以只输入若干字符?
问题2:若2个字符串长度不相等,那如何异或?还是字符串直接按字节进行异或?
问题3:最后输出新变量,是以字符串输出?还是是以其他输出?
wankong 2007-11-02
  • 打赏
  • 举报
回复
是32个字符,不知道具体题目要求,按照道理,应该是直接两个字符串对应的进行异或运算,char类型支持异或按位,直接操作就可以了。
for(int i=0;i<=31;i++)
{
c[i]=a[i]^b[i];
}
如果我没有理解错误,这样好像就可以。
gaga16 2007-11-02
  • 打赏
  • 举报
回复
没有人啊,真的很着急啊!!!
gaga16 2007-11-02
  • 打赏
  • 举报
回复
还有一个问题,不好意思,就是上面的例子Result按16进制输出,
那假如Result就是前16个是1,后16个是2,怎么分成2组16进制的数组

KEYA[0]=0X11;
KEYA[1]=0X11;




KEYA[7]=0X11;

KEYB[0]=0X22;
KEYB[1]=0X22;
...
KEYB[7]=0X22;

就是Result0-15 ,16-31分开

是不是要用移位的运算啊, KEYA[0]=KEY[0]<<1,KEYA[0]=KEYA[0]+KEYA[1] 这样能出上面的结果吗?

希望大侠们明白啊!!!!


xaobao 2007-11-02
  • 打赏
  • 举报
回复
wankong
海子
的程序思路是对,32位密钥为16个16进制数字. 把16进制转ASCII码(一个ASCII为两个二进制数)再进行异或,取两个数的ASCII码转换成16进制数.
原理应该是这样的.ASCII转16进制的网上有.
gaga16 2007-11-02
  • 打赏
  • 举报
回复
谢谢了,不过还是想知道怎么编程我说的那个样子,
还有一个问题就是,比如刚才算出result[i]是16进制的吗?
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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