读书人

怎样按这个算法反求这个值啊该怎么解决

发布时间: 2012-02-05 12:07:15 作者: rapoo

怎样按这个算法反求这个值啊?
有一个字符串..8位的... 内容都是数字.如: "12345678 "

把这个数字传入一个函数里进行计算..

DWORD Conver(char *test)
{
DWORD dEsi = 0;
DWORD bAl = 0;

while(*test != '\0 ')
{
bal = *test;
dEsi = dEsi + dEsi * 4;
dEsi = bAl + dEsi * 2 - 48;
test++;
}

return dEsi;
}

最后求出来的是 "12345678 " 转换为数字 12345678 的 十六进制..(可以的话麻烦告诉一下这个算法为什么可以把这字符串数字转换为数字的十六进制)


现给出一个十六进制的数字(9989932). 按以上的算法怎样求出是哪8位数字组合的字符串..

谢谢各位了..

[解决办法]
有错误:
while(*test != '\0 ')
{
bal = *test; // bal没声明的变量
dEsi = dEsi + dEsi * 4; // 为什么不是dEsi * 5,而要乘4后再加自己
dEsi = bAl + dEsi * 2 - 48; // 为什么dEsi * 2不在前面直接用dEsi * 10,而又要在这里计算,
影响效率,为什么不直接用*test代替bAl,而要多做赋值运算?
test++;
}

// 而且这个结果不太像是十六进制的,因为是dEsi * 10 + bAl - 48,是一个数字乘上10,然后加上下一位,所以个人认为是求字符串的十进制数字.
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float Conver(char *test,int n)
{
float d = 0;
int b = 0;
for (int i=0;i <n;i++)
{
b = (*test);
d = d + d * 4;
d = b + d * 2 - 48;
test++;
}
return d;
}

void main()
{
char data[8]={ '1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ', '8 '};
float value;
for (int i=0;i <8;i++)
printf( "%c\n ",data[i]);
value= Conver(data,8);
printf( "%f\n ",value);
}

执行结果:
1
2
3
4
5
6
7
8
12345678.000000
[解决办法]

bal = *test;
dEsi = dEsi + dEsi * 4;
dEsi = bAl + dEsi * 2 - 48;
test++;

可以简化为
bal = *test;
dEsi = 5*dEsi;
dEsi = bAl + dEsi * 2 - 48;
test++;

再可以简化为
bal = *test;
dEsi = bAl + dEsi * 10 - 48;
test++;

再可以简化为
bal = *test;
dEsi =dEsi * 10 +(bal-48);
test++;

这样就好理解了

读书人网 >C语言

热点推荐