刚接触delphi,有个问题不懂
itemp:int64;
itemp:=strtoint(leftstr(str,9))*21+6787774521;str是'134327626222',结构itemp是5313687371.为什么呢?

解决方案 »

  1.   

    刚接触delphi,有个问题不懂  
    itemp:int64;  
    itemp:=strtoint(leftstr(str,9))*21+6787774521;  
     
    str是'134327626222',结果itemp是5313687371.为什么呢?  
      

  2.   

    str是字符,
    strtoint(leftstr(str,9))这句代码的意思是str取前9位转换成数字
      

  3.   

    是啊.可是itemp的结果应该是9608654667才对.
    5313687371怎么转换来的?
      

  4.   

    9608654667,hex形式是 2 3cb8 6f4b
    5313687371,hex形式是 1 3cb8 6f4b
    最高位的0x02变成了0x01如果str是"303189420",实际值应该是13154752341(hex 3 1015 9755),但是itemp结果是
    8859785045(hex 2 1015 9755),最高位的0x03变成了0x01.费解啊.
      

  5.   

    应该用strtoint64
    而不是strtoint
    不然的话,int最多能表示到2147483647,超过就溢出了,当然就成了负数
      

  6.   

    恩.明白了.
    strtotint限制了strtoint(leftstr(str,9))*21这个的范围.终于搞懂了.郁闷死我了
    谢谢兄弟们.