Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Signed integers
Message
 
À
03/03/1998 10:30:42
Gary Foster
Pointsource Consulting LLC
Chanhassen, Minnesota, États-Unis
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Divers
Thread ID:
00082178
Message ID:
00082301
Vues:
34
>>
>>Is there a reason that VFP's BINTOC() won't work for you?
>
>Unfortunately, the BINTOC() and CTOBIN() functions dont produce the proper chars. BINTOC() almost works except for two problems, the MSB order is reversed and the high byte is nonstandard. The first issue is trivial and easily dealt with, but the second is not. I looked at how VFP stores it's integers in a dbf and they don't match BINTOC(). Bummer. Perhaps the high order byte rule can be determined with some experimentation and the VFP functions used. I'll find out.
>
>Thanks for the suggestion.
>
>Gary Foster

Gary,

Both of these function invert the state of the most significant byte as well as the order. Positive numbers have what should be the most significant bit set (the mantissa), and negative have it cleared. This is because the purpose of these functions is for generating keys for tables and the way strings are evaluataed. The problem with FoxPro code that doesn't take the sign in account, is that FP stores all numeric values in memory as 8 byte floating points. Therefore, a function that's evaluating -1, for example (4 bytes all equal to 255) will return 4294967295. The solution is a function similar to what follows:
FUNCTION Str2Int

LPARAMETER pc_val
    
LOCAL lnresult, lnlen, lni, lnmsb
lnresult = 0
lnlen = LEN(pc_val)
lnmsb = (lnlen * 8) - 1
FOR lni = 1 TO lnlen
  lnresult = lnresult + ASC(SUBSTR(pc_val, lni, 1)) * (256 ^ (lni - 1))
NEXT
* Test the mantissa
IF BITTEST(lnresult, lnmsb)
  lnmax = (2 ^ (lnmsb + 1))
  lnresult = lnresult - lnmax
ENDIF
RETURN lnresult
The above will properly handle signed integers.

hth,
George

Ubi caritas et amor, deus ibi est
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform