| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1607 人关注过本帖
标题:同样的语句,不同的机器,竟然结果不同
只看楼主 加入收藏
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用scilent在2013-8-15 12:59:45的发言:

我觉得,非常有道理,以前没有注意这个问题,谢谢指点

谈不上指点。我只是凭第一感觉,没有实测你的程序,你可以用调试窗口一条条运行代码,然后在监视窗口把几个重点变量监控一下,观察它们值的变化是否符合你的预期。另外,你第一句中的“Interger”写错了,整型的英语是“Integer”。
2013-08-15 13:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
看清楚了,VFP没那么容易溢出:
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2013-08-15 13:03
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用TonyDeng在2013-8-15 12:58:42的发言:

一看用了位异或运算,这代码就没什么意思。位运算之后,那个序列号是负数,加上负号,是11位字符,而str()函数默认是10位字符,到后面的newstr字符串只有4个字符,但他又在循环中每次提取2个字符作chr()字符——显然当汉字用——最后都不知道想干什么。整个运算绕来绕去,把简单的事情搞复杂。
谢谢您的指导。没有注意的位数的问题。真是太感谢了
你说得对,就是想搞复杂点,可是玩过火了。

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果对溢出的现象不清楚,参考一下置顶描红那个帖子。

授人以渔,不授人以鱼。
2013-08-15 13:05
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用taifu945在2013-8-15 13:02:49的发言:


谈不上指点。我只是凭第一感觉,没有实测你的程序,你可以用调试窗口一条条运行代码,然后在监视窗口把几个重点变量监控一下,观察它们值的变化是否符合你的预期。另外,你第一句中的“Interger”写错了,整型的英语是“Integer”。
谢谢,太心焦了弄错了。虽然您 没有试,但您一说到值的问题,我马上想到问题可能出什么地方,对我有启发!

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2013-08-15 13:09
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
以下是引用TonyDeng在2013-8-15 12:58:42的发言:

一看用了位异或运算,这代码就没什么意思。位运算之后,那个序列号是负数,加上负号,是11位字符,而str()函数默认是10位字符,到后面的newstr字符串只有4个字符,但他又在循环中每次提取2个字符作chr()字符——显然当汉字用——最后都不知道想干什么。整个运算绕来绕去,把简单的事情搞复杂。



同意版主的说法。运行了一下,我这儿错误出在str(),没有规定返回长度,数值串长度溢出,newstr=alltrim(str(newserial))就是这儿的隐患错误,数值串长度如果默认限定又没有另行规定长度时,溢出。
2013-08-15 13:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
要取得数值(不管是整数还是浮点数)的字符串,使用TRANSFORM()函数即可,不用绕来绕去,因为VFP内部所有数值型数据都是以字符串储存的,哪怕是超出2^32的整数,只要在赋值时在后面加个.0作为浮点数,VFP就把它视为64位的数据储存,然而在内部字符串中,它却是没有.0的,即完完整整的比2^32还长的长整数形式,用TRANSFORM()把这个内部形式反馈出来就是了。

记住:TRANSFORM()函数返回的是数据的内部形式,即最原始的形式。

[ 本帖最后由 TonyDeng 于 2013-8-15 13:30 编辑 ]

授人以渔,不授人以鱼。
2013-08-15 13:16
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
回复 16楼 TonyDeng
昨天我在逐条测试的时候,发觉那个 地方有问题,不知道为什么 。
vfp说明很早的时候看过,现在基本上是用到哪儿看哪儿。我只有6.0的说明,在str()中没有提到位数的问题,所以也就忽略了。您一行行给我演示,再次感谢。

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:24
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
newstr,全是******,
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-08-15 13:34
快速回复:同样的语句,不同的机器,竟然结果不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018947 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved