挑战性的算法,谁能看明白???

wwyi 2003-12-12 11:48:09
算法如下:
ClientToSMS::fold(unsigned char Out[16])
{
UINT Output[4] = {0,0,0,0};

for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
Output[i]<<=8;
Output[i] |= Out[4*i+j];
}
}
otp[0] = Output[0] ^ Output[2];
otp[1] = Output[1] ^ Output[3];
CString temp;
OtpEnd.Format("%x", otp[0]);
if(OtpEnd.GetLength()<8)
{
for(int i=0; i<(8-OtpEnd.GetLength()); i++)
OtpEnd = "0" + OtpEnd;
}

temp.Format("%x", otp[1]);
if(temp.GetLength()<8)
{
for(int j=0; j<(8-temp.GetLength()); j++)
temp = "0" + temp;
}

OtpEnd += temp;
}
这个算法到底做了什么呢?
...全文
32 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gladiator811016 2003-12-12
OtpEnd = "0" + OtpEnd;
temp = "0" + temp;
mark 一下,顺便问一下,上面两个语句是什么意思,我是菜鸟
  • 打赏
  • 举报
回复
cxjddd 2003-12-12
后面的应该是转换成16进制
  • 打赏
  • 举报
回复
greatcat 2003-12-12
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
Output[i]<<=8;
Output[i] |= Out[4*i+j];
}
}
这段循环以及“UINT Output[4] = {0,0,0,0};”太浪费了
可以这样:
UINT* Output;
Output=(UINT*)Out;
  • 打赏
  • 举报
回复
wwyi 2003-12-12
tokens ,这个算法是对一个字符型数组进行处理,但处理的结果是什么呢?
  • 打赏
  • 举报
回复
tokens 2003-12-12
看得懂这算法,但谁知道拿来干什么?
函数名:ClientToSMS,是不是发短消息 ?
  • 打赏
  • 举报
回复
greatcat 2003-12-12
有时间再看,上班了
  • 打赏
  • 举报
回复
greatcat 2003-12-12
for(int i=0; i<4; i++)
{
for(int j=0; j<4; j++)
{
Output[i]<<=8; //向高位移一个字节,即8个bit
Output[i] |= Out[4*i+j]; //从输入读出字节内容
}
}
这一段的意思是把Out[16]转换为一个UINT(无符号整形)类型的数组,数组大小为4
提醒:int的大小为4个字节
  • 打赏
  • 举报
回复
greatcat 2003-12-12
OtpEnd = "0" + OtpEnd;
temp = "0" + temp;
字符串拼接吧 非C
  • 打赏
  • 举报
回复
cxjddd 2003-12-12
首先的 for (i, j) 循环是从 Out 到 Output 的大(小)端字序转换?
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:48
社区公告
暂无公告