求教大家啊 以QQ币做酬劳

[复制链接]
3091|14
 楼主| ql1007 发表于 2010-9-6 15:23 | 显示全部楼层 |阅读模式
键盘上输入数字 1 2 3 4.。怎么转成十进制形式比如输1 2 3 4.。转成1234,最大能输8个数字我试了下 用long型 超出了内存大小,因为底层加密算法特别浩资源 占50%内存,而PIC这个只有6个BANK ,512个字节的RAM,我用LONG型 结果编译时发现占用了90%多以上 无法编译通过看看你有什么算法比较好的 。。。

我原来是这么写的:
//unsigned long Scount[]={1,10,100,1000,10000,100000,1000000,10000000};
/*for(l=0;l<jc;l++)//查表计算出转10进制的数 JC是按键输入几个数字的记录变量
{
    Num+=Scount[l]*(unsigned long)(l_tmpdate3[(jc-1)-l]);
}*/

由于这样写 开销所剩无几,无法编译通过,求高人给写个转换代码,帮帮小菜,小菜愿意Q币做为小小偿谢 ,谢谢了。
 楼主| ql1007 发表于 2010-9-6 15:28 | 显示全部楼层
l_tmpdate3 是按键键值保存数组
yewuyi 发表于 2010-9-6 16:51 | 显示全部楼层
为何那么复杂?移位不行吗?
 楼主| ql1007 发表于 2010-9-7 10:02 | 显示全部楼层
版主终于关注我了。。帮帮忙啊 版主 怎么移位啊,能否给小菜写个移位代码啊?
十分感谢啊
yewuyi 发表于 2010-9-7 10:19 | 显示全部楼层
你的目的是否为:把通过键盘输入的8个数字按照个、十、百、千。。。的顺序组合成一个数值?
 楼主| ql1007 发表于 2010-9-7 10:23 | 显示全部楼层
是的,但是不一定是8个数 几个数 是由变量J记录的。。。版主给看看 怎么移位操作啊
yewuyi 发表于 2010-9-7 11:08 | 显示全部楼层
最大8个数?

假如定义为32位的一个变量temp,输入的数字为keyval(n),n=0~7,
因为你输入的keyval(n)取值范围在0~9内,从数值范围的角度看,半个字节即可,而32位的变量temp正好是由4个字节组成,由此我们可规定keyval(n)对应于temp的4n~4n+4位,如此,就可以通过移位的方式实现这些操作。
 楼主| ql1007 发表于 2010-9-7 11:14 | 显示全部楼层
版主啊 PIC我用的这款 是8位的 PIC16LF1937,无法定义32位的变量 不用LONG 不行吧
 楼主| ql1007 发表于 2010-9-7 11:15 | 显示全部楼层
还请版主有空帮我写个转10进制这代码啊 。。。
yewuyi 发表于 2010-9-7 11:44 | 显示全部楼层
版主啊 PIC我用的这款 是8位的 PIC16LF1937,无法定义32位的变量 不用LONG 不行吧
ql1007 发表于 2010-9-7 11:14



不要开玩笑,类如unsigned long int不就是32位吗?
MCU怎么可能不支持32位变量?只要编译器支持,MCU自然就是支持的。

至于代码,都已经说的这么清楚了?竟然还让别人给你写!
米饭要自己吃,总不至于让别人给你喂饭吧。。。
hxlwjn 发表于 2010-9-7 12:03 | 显示全部楼层
本帖最后由 hxlwjn 于 2010-9-7 12:04 编辑

unsigned long num = 0;
for(j= jc-1; j>=0;j--)
   num = 10*num+l_tmpdate3[j];
为什么不这样呢?
hxlwjn 发表于 2010-9-7 12:06 | 显示全部楼层
你定义的Scount[]数组太占RAM了。
 楼主| ql1007 发表于 2010-9-7 12:45 | 显示全部楼层
是啊 的确是我的Scount数组太占RAM,回复11楼 ,您的方法是对的 不过反了 呵呵 我改了下 的确能编译过去了 十分感谢啊 ,
sytu_chyq 发表于 2010-9-7 14:57 | 显示全部楼层
  1. unsigned long num = 0;
  2. for(j = 0; j <= jc-1; j++)
  3.    num = (num << 4) | keyval;
e掾木 发表于 2010-9-8 08:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

122

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部