Discussione:
Convertire una stringa in un intero
(troppo vecchio per rispondere)
Blowin' free
2007-11-24 17:10:41 UTC
Permalink
Salve,
vorrei convertire una stringa in un intero univoco.
Ho trovato una funzione che potrebbe fare al caso mio, purtroppo il Result
può essere fuori range
Questa è la funzione

type
UInt64 = 0..9223372036854775807;

function Unc(s: string): UInt64;
var
x: Integer;
begin
Result := 0;
for x := 1 to Length(s) do Result := Result + ((Ord(s[x])) shl ((x - 1) *
8));
end;


Come posso fare per avere un integer come conversione?
Grazie
Andrea
Andrea Laforgia
2007-11-24 17:39:24 UTC
Permalink
Post by Blowin' free
vorrei convertire una stringa in un intero univoco.
Non è possibile.
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Blowin' free
2007-11-24 19:01:23 UTC
Permalink
Quello che voglio è dare un ID univoco ad ogni programma in esecuzione sul
PC. L' ID però deve essere sempre lo stesso per lo stesso programma.
Come posso fare?
Post by Andrea Laforgia
Post by Blowin' free
vorrei convertire una stringa in un intero univoco.
Non è possibile.
--
questo articolo e` stato inviato via web dal servizio gratuito
Marco Breveglieri
2007-11-24 19:01:52 UTC
Permalink
Post by Blowin' free
Quello che voglio è dare un ID univoco ad ogni programma in esecuzione sul
PC. L' ID però deve essere sempre lo stesso per lo stesso programma.
Come posso fare?
Genera un GUID (lo puoi fare anche nell'IDE di Delphi con CTRL+SHIFT+G,
se non ricordo male la combinazione) e utilizzalo come "identificatore"
per la tua esigenza.

Ciao,
Marco.
--
MARCO BREVEGLIERI
(http://www.marco.breveglieri.name)
Andrea Laforgia
2007-11-25 10:51:09 UTC
Permalink
Post by Blowin' free
Quello che voglio è dare un ID univoco ad ogni programma in esecuzione sul
PC. L' ID però deve essere sempre lo stesso per lo stesso programma.
Come posso fare?
Parti da 1 e prosegui fino a che non esaurisci i numeri naturali.
O c'è qualche vincolo che impone di non avere numeri interi come ID?
Poi bisogna capire che intendi con "ID uguale per lo stesso programma":
sono i processi a girare sul PC e puoi avere più processi per lo stesso
programma...
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Blowin' free
2007-11-25 11:30:33 UTC
Permalink
Il problema è questo:
Ho una unit standard comune a tutti i miei programmi.
In questa unit controllo che il programma installato sia stato attivato in
base a un codice che rilascio successivamente all'acquisto del programma da
parte del cliente. Il codice che rilascio all'utente lo calcolo in base a
diversi parametri tra cui il seriale dell'Hard disk su cui è installato il
software (per evitare copie su altri PC).
Il sistema funziona. L'unico problema è che con questo sistema due programmi
diversi sullo stesso hard disk hanno lo stesso codice di attivazione. Vorrei
risolvere aggiungendo ai parametri di calcolo un ID univoco per ogni
programma diverso. Non voglio però settare questo ID manualmente all'interno
dei programmi.
L'idea era quella di leggere all'avvio del programma il nome programma es.
"programma.exe", convertirlo in un intero univoco e fare i miei calcoli e
verifiche.
Dico intero perchè la mia funzione di calcolo è già pronta ma richiede però
un integer e siccome è abbastanza complessa non volevo rimetterci mano.

questa unit che ho trovato sarebbe stata perfetta ma il range è troppo
elevato e ho verificato che quasi sempre sforo gli integer

type
UInt64 = 0..9223372036854775807;

function Unc(s: string): UInt64;
var
x: Integer;
begin
Result := 0;
for x := 1 to Length(s) do Result := Result + ((Ord(s[x])) shl ((x - 1) *
8));
end;

Spero di essere stato chiaro.
Se non dovessi trovare soluzione alla fine vedrò di aggiungere un ID
all'interno di ogni programma anche se non mi piace molto perchè vorrei che
fosse tutto automatico ed indipendente.

Grazie mille
Andrea
Post by Andrea Laforgia
Post by Blowin' free
Quello che voglio è dare un ID univoco ad ogni programma in esecuzione sul
PC. L' ID però deve essere sempre lo stesso per lo stesso programma.
Come posso fare?
Parti da 1 e prosegui fino a che non esaurisci i numeri naturali.
O c'è qualche vincolo che impone di non avere numeri interi come ID?
sono i processi a girare sul PC e puoi avere più processi per lo stesso
programma...
--
questo articolo e` stato inviato via web dal servizio gratuito
Frazy
2007-11-25 19:00:54 UTC
Permalink
Mi sembra una soluzione assurda...

In ogni caso risolvi vedendo quanto è grande il programma su disco...
Size del file... Anche perchè se uno rinomina il programma lo usa alla
grande... Magari capisce anche per caso cosa hai fatto o leggendo
questo NG.

Ciao
Frazy
2007-11-25 19:58:29 UTC
Permalink
Oppure ancora meglio calcolando il checksum del programma... Forse
trovi qualcosina in giro...

Okkio al SIZE cerca di non essere troppo preciso per differenze nelle
diverse versioni di windows.
Brunello
2007-11-26 09:02:06 UTC
Permalink
Post by Frazy
Oppure ancora meglio calcolando il checksum del programma... Forse
trovi qualcosina in giro...
Okkio al SIZE cerca di non essere troppo preciso per differenze nelle
diverse versioni di windows.
come altra variabile puoi utilizzare la data e l'ora di creazione
dell'eseguibile sicuramente diversa per le due applicazione, ciao
Brunello
Blowin' free
2007-11-26 13:27:10 UTC
Permalink
A questa non avevo pensato..
non è affatto male come idea
Ciao Andrea
Post by Brunello
come altra variabile puoi utilizzare la data e l'ora di creazione
dell'eseguibile sicuramente diversa per le due applicazione, ciao
Brunello
Frazy
2007-11-26 13:29:36 UTC
Permalink
Post by Brunello
come altra variabile puoi utilizzare la data e l'ora di creazione
dell'eseguibile sicuramente diversa per le due applicazione, ciao
Brunello
Il metodo più sicuro è il check sum... Viene utilizzato anche da
programmi di installazione di software molto famosi...

guarda qui:

http://www.explainth.at/en/delphi/chksums.shtml

La data di creazione è una buona idea ma può essere cambiata, mentre
il size del file o il checksum no. Il checksum è un po' più
complicato.

Blowin' free
2007-11-26 13:24:40 UTC
Permalink
Se uno rinomina il programma, il programma nemmeno parte, e in ogni caso non
va la connessione al db


"Frazy" <***@libero.it> ha scritto nel messaggio news:0bd17dfb-e6f4-4d83-bc9a-***@g30g2000hsb.googlegroups.com...
Mi sembra una soluzione assurda...

In ogni caso risolvi vedendo quanto è grande il programma su disco...
Size del file... Anche perchè se uno rinomina il programma lo usa alla
grande... Magari capisce anche per caso cosa hai fatto o leggendo
questo NG.

Ciao
Frazy
2007-11-25 02:31:58 UTC
Permalink
Post by Blowin' free
vorrei convertire una stringa in un intero univoco.
Ho trovato una funzione che potrebbe fare al caso mio, purtroppo il Result
può essere fuori range
Questa è la funzione
dipende come sono le stringhe e quanto sono lunghe....

es. se la stringa comprende solo lettere dalla a alla z puoi creare
una base simile a quella esadecimale ed eseguire i calcoli.
Ovviamente la lunghezza dell'intero deve essere compresa nel tipo di
intero che usi...

Es. alfabeto italiano

a=1
b=2
c=3
....
i=9
l=10
...
z=21

aa=22+1=23
az=22+21=43

etc...

etc. usa algoritmo di conversione dei numeri per cambiare base...
Loading...