[Java] Somma di char to int
Salve,
chiedo un aiuto.
Avendo un intero, che è composto da somme consecutive di numeri del valore intero di char, vorrei riuscire a convertirlo del valore "semantico" dell'intero.
Spiego meglio, avendo un array di char, in codifica Unicode:
['1','2','3']
gli sommo assieme: (int)('1'+'2'+'3') = 150
questo intero vorrei convertirlo nella somma algebrica dei valori dei caratteri cioè: 6.
Non ricordo se in C si potesse fare, mi pare di si, ma in Java come riesco con i caratteri Unicode, di sicuro le API hanno qualche funzione utile, ma non saprei quale.
Ringrazio chi aiuta
chiedo un aiuto.
Avendo un intero, che è composto da somme consecutive di numeri del valore intero di char, vorrei riuscire a convertirlo del valore "semantico" dell'intero.
Spiego meglio, avendo un array di char, in codifica Unicode:
['1','2','3']
gli sommo assieme: (int)('1'+'2'+'3') = 150
questo intero vorrei convertirlo nella somma algebrica dei valori dei caratteri cioè: 6.
Non ricordo se in C si potesse fare, mi pare di si, ma in Java come riesco con i caratteri Unicode, di sicuro le API hanno qualche funzione utile, ma non saprei quale.
Ringrazio chi aiuta

Risposte
Per ottenere il valore numerico corrispondente alla cifra inclusa in un char si può usare:
Oppure, come è anche possibile fare in C, si ottiene la cifra sottraendo al carattere il carattere '0'. In Unicode le cifre sono infatti in ordine e consecutive, per cui '5' - '0' è uguale a 5.
int one = Character.digit('1', 10);
Oppure, come è anche possibile fare in C, si ottiene la cifra sottraendo al carattere il carattere '0'. In Unicode le cifre sono infatti in ordine e consecutive, per cui '5' - '0' è uguale a 5.
int ret = '1' + '2' + '3' - 3*'0';
Si certo con quei metodi è anche "facile", recuperare la codifica intera.
Ma il mio problema è che non conosco gli addendi della somma, ne quanti sono.
I dati in mio possesso sono un intero che è una somma di "char", nulla più.
Ma il mio problema è che non conosco gli addendi della somma, ne quanti sono.
I dati in mio possesso sono un intero che è una somma di "char", nulla più.
Non sono certo che il tuo problema sia allora risolvibile. Conoscendo il numero di addendi potresti semplicemente sottrarre '0' tante volte quanti sono gli addendi, ma nel tuo caso non sai quante volte devi sottrarre quel valore. Ci potrebbero insomma essere diverse somme possibili. Ma perché hai bisogno di questa "inversione"?
Forse "si sa" quanti addendi sono: c'è la dimensione dell'array.
Però non ho capito lo scopo, e se serve qualcosa in particolare magari c'è un metodo alternativo. ham_burst, dacci qualche altra informazione.
Però non ho capito lo scopo, e se serve qualcosa in particolare magari c'è un metodo alternativo. ham_burst, dacci qualche altra informazione.
Allora: l'intero (somma di char) è una produzione fatta da un metodo, che lavora su un vettore di char. Questo vettore è una rappresentazione di un grafo, perciò gli addendi sono solo un sottoinsieme di questo vettore.
Per evitare la conversione ad interi (char2int) del vettore che ha un suo costo, ho lavorato sulla rappresentazione intera dei char, che è equivalente (tutti i numeri erano decimali).
ma se mi dite che devo conoscere il numero di addendi, e che avendo solo il risultato, non si può fare questa conversione, mi conviene fare una conversione prima di chiamere questo metodo.
Per evitare la conversione ad interi (char2int) del vettore che ha un suo costo, ho lavorato sulla rappresentazione intera dei char, che è equivalente (tutti i numeri erano decimali).
ma se mi dite che devo conoscere il numero di addendi, e che avendo solo il risultato, non si può fare questa conversione, mi conviene fare una conversione prima di chiamere questo metodo.

Allora forse ti conviene rappresentare direttamente i numeri: invece di '1' per 1, usa '\u0001' per 1

"Rggb":
Allora forse ti conviene rappresentare direttamente i numeri: invece di '1' per 1, usa '\u0001' per 1
Sì alla fine è un po' la soluzione che ho adottato. Ho fatto una trasformazione in-place sottraendo '0' all'input dell'array nel momento della creazione.
Grazie della disponibilità

Approfitto del post, per chiedere un altro consiglio.
Sto cercando un metodo "veloce" per leggere un file di testo.
Al momento il codiche che ho scritto, utilizza la funzione read(byte[],offset,length) della Classe FileInputStream, cioè legge una porzione che mi interessa del file di testo (una matrice) e lo salva in un array di byte.
Dato che questo vettore lo utilizzero come base per fare dei calcoli successivi (come quelli detti nel post sopra), ho bisogno di dati gestibili. Ma al momento vorrei sapere se ci sono altre classi o metodi più efficenti di lettura da file.
Grazie
Sto cercando un metodo "veloce" per leggere un file di testo.
Al momento il codiche che ho scritto, utilizza la funzione read(byte[],offset,length) della Classe FileInputStream, cioè legge una porzione che mi interessa del file di testo (una matrice) e lo salva in un array di byte.
Dato che questo vettore lo utilizzero come base per fare dei calcoli successivi (come quelli detti nel post sopra), ho bisogno di dati gestibili. Ma al momento vorrei sapere se ci sono altre classi o metodi più efficenti di lettura da file.
Grazie

Era esattamente ciò che cercavo, grazie mille 
Provando ad applicare ByteBuffer ed il suo metodo get(int index), intanto sembra rispondere bene sul mio sistema.

Provando ad applicare ByteBuffer ed il suo metodo get(int index), intanto sembra rispondere bene sul mio sistema.