我从路由器里面读取一部分数据(应该是字符吧?),然后把这些数据存到一个TStrings里面。然后呢,从这个TStrings里面读出来在存到数据库里。可是我明明读出的数据是多位的正数字,为什么存到数据库里,就变成负数了。

解决方案 »

  1.   

    好像在TStrings里面就成了负数了,到底怎么回事啊?
      

  2.   

    代码没法贴啊,太长了。我读取路由器mib库里的字段啊,难道是返回的有问题吗?
      

  3.   

    是不是类型(Integer->Cardinal)弄错了?或者是Endian(Big-Endian和Little-Endian)不一致?
      

  4.   

    设断点,跟踪一下,把存入数据库的SQL粘出来看看。
      

  5.   

    把这些数据存到一个TStrings里面 及 存到数据库里的代码贴出来~~
      

  6.   

    我好像发现了一些问题。具体是这样的:
    这些数据在路由器里面定义的是长整形的,我用的是第三方synapse的函数snmpget(),他返回的就是字符。可能就是存取的时候出现了问题了。我应该怎么办啊?是不是第三方的函数存在问题啊?
      

  7.   

    是不是字节序的问题?
    路由器里的long的4个字节从前到后是:b1,b2,b3,b4
    delphi拿到到应该转为b4,b3,b2,b1
      

  8.   

    我设置的变量是AnsiString的,和这个有关吗?也不应该出现负数啊!!!
      

  9.   

    跟踪调试一下看看什么时候开始变成负数的。再不行你就ABS再强转一次……嘿嘿~~
      

  10.   

    各位老大,问题是不是这样呢:暂且不管是什么时候转换的,如果这个数字是int 32 的,那么如果大于最大的正值以后,是不是就会溢出为负数啊?
    如果我不想让它溢出,或者把这个负数再变回大于2的32次方的正数,还有办法吗?