急。。关于类型转换,如何把AnsiString转换成long 类型。 long(ansistring)好象不行!!!!

CPerlAsm_Lx 2004-01-25 07:53:52
急。。关于类型转换,如何把AnsiString转换成long 类型。 long(ansistring)好象不行!!!!
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alex106 2004-01-25
  • 打赏
  • 举报
回复
我很生气,你知道吗?我不是已经解释过了:
“C/C++语言里面,在32位编译器看来,INT和LONG类型都是INT32类型,即双字整形,他们之间赋值无须CAST,而且没有精度损失。所以TOINT的返回值是INT,而赋值给LONG,结果是一样的。”

AnsiString a="1234567890";
long b=a.ToInt();//我测试过了,B=1234567890,在INT范围内
long c=a.ToIntDef(100);//C=1234567890

一下是BCB对类型的定义,你自己看一下,就知道1234567890可以存放在INT和LONG类型里

32-bit data types, sizes, and ranges

Type Size (bits) Range Sample applications
unsigned char 8 0 <= X <= 255 Small numbers and full PC character set
char 8 -128 <= X <= 127 Very small numbers and ASCII characters
short int 16 -32,768 <= X <= 32,767 Counting, small numbers, loop control
unsigned int 32 0 <= X <= 4,294,967,295 Large numbers and loops
int 32 -2,147,483,648 <= X <= 2,147,483,647 Counting, small numbers, loop control
unsigned long 32 0 <= X <= 4,294,967,295 Astronomical distances
enum 32 -2,147,483,648 <= X <= 2,147,483,647 Ordered sets of values
long 32 -2,147,483,648 <= X <= 2,147,483,647 Large numbers, populations
float 32 1.18牋10^-38 < |X| < 3.40牋10^38 Scientific (7-digit) precision)
double 64 2.23牋10^-308 < |X| < 1.79牋10^308 Scientific (15-digit precision)
long double 80 3.37牋10^-4932 < |X| < 1.18牋10^4932 Financial (18-digit precision)
CPerlAsm_Lx 2004-01-25
  • 打赏
  • 举报
回复
我是要吧 AnsiString abc ="1234567890";这个里面的转换成数字,但是这个是超出INT范围的。
所以要转换成LONG型,可是ToIntDef();也只能转换到int范围以内的。超过int还是不能转换啊。。。

我再加点分。
CPerlAsm_Lx 2004-01-25
  • 打赏
  • 举报
回复
AnsiString ="12345678";
超出int的范围,
但是没超出long的范围。
为什么可以用ToIntDef(0);呢?
Alex106 2004-01-25
  • 打赏
  • 举报
回复
哎……
碰到你累死……

C/C++语言里面,在32位编译器看来,INT和LONG类型都是INT32类型,即双字整形,他们之间赋值无须CAST,而且没有精度损失。所以TOINT的返回值是INT,而赋值给LONG,结果是一样的。

TOINT是转换为整形,但是如果转换出错则抛出异常。
TOINTDEF也是转换为整形,但是如果转换出错则返回默认值。
给你举个例子:

AnsiString a="aaa";
long b=a.ToInt();//将抛出异常
long c=a.ToIntDef(100);//C等于100
CPerlAsm_Lx 2004-01-25
  • 打赏
  • 举报
回复
讲讲先啊?为什么TOINT不可以 TOINTDEF就可以啊?? 看帮助里也没写可以转换成LONG啊。

Alex106 2004-01-25
  • 打赏
  • 举报
回复
给分!
Alex106 2004-01-25
  • 打赏
  • 举报
回复

try
{
AnsiString a="1234";
long x=a.ToIntDef(0);
catch(...)
{
如果超出LONG的取值范围,在这里处理
}
Alex106 2004-01-25
  • 打赏
  • 举报
回复
有一点你要明白
在32位OS里,INT和LONG的长度是一样的,都是32位整形。
你说要把ANSISTRING转换为LONG,等价于把ANSISTRING转换为INT,如果你的ANSISTRING超过LONG的取值范围,那也同样超过INT的取值范围。

如果你一定要那么说,那你这样用。

AnsiString a="1234";
long x=a.ToIntDef(0);
CPerlAsm_Lx 2004-01-25
  • 打赏
  • 举报
回复
如果转换过来会超过int的范围的话,这个ToInt函数就不能用了啊
CPerlAsm_Lx 2004-01-25
  • 打赏
  • 举报
回复
如果 a = 12345678910呢??
Alex106 2004-01-25
  • 打赏
  • 举报
回复
AnsiString a="1234";
long x=a.ToInt();

就这样啊,呵呵,给分给分。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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