Salve,
ho un array di byte e vorrei poter aggiungere un nuovo byte all'inizio di questo array e un altro alla fine, è possibile farlo attraverso un metodo esistente??
Salve,
ho un array di byte e vorrei poter aggiungere un nuovo byte all'inizio di questo array e un altro alla fine, è possibile farlo attraverso un metodo esistente??
No.
Innanzitutto bisogna capire esattamente cosa intendi per "aggiungere" un byte all'inizio e uno alla fine.
Se intendi "sostituire" il contenuto del primo e ultimo byte dell'array sono due istruzioni di assegnazione.
Se intendi modificare la dimensione dell'array facendola diventare più grande di due unità, è un procedimento che richiede una allocazione di un nuovo array più grande.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
allora faccio un esempio breve, il mio byte array ha una capienza di 20 byte, di cui soltanto 12 sono stati occupati. Adesso vorrei poter aggiungere un nuovo byte all'inizio ed uno alla fine
Ok, ho capito cosa intendi.
Faccio una premessa: se il tuo array di byte è di dimensione 20, allora contiene 20 byte. Non importa che tu "consideri" solo i primi 12... i restanti sono tutti occupati dal byte 0. Questo perchè l'array è un oggetto contenente 20 valori primitivi e i valori primitivi hanno sempre un valore (quello di default, almeno).
Questa operazione crea un array di 20 byte... tutti inizializzati a 0.codice:byte[] mioArray = new byte[20];
Detto questo, immagino che quello che tu vuoi ottenere sia un array in cui considerare le prime 14 posizioni, dove la prima e l'ultima sono quelle nuove.
Le operazioni da compiere sono queste:
1) Shift di tutti i valori presenti di una posizione in avanti (un banalissimo ciclo for)
2) Aggiunta del nuovo valore in posizione 0
3) Aggiunta del nuovo valore in posizione 13
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
grazie mille!!
ascolta sto provando l'Arrays.binarySearch
esempio
byte Arr[] = { 68, 21, 66, 22, 23, 30, 31, 32, 33 };
byte searchValue = 68;
int index = Arrays.binarySearch(Arr, searchValue);
non capisco però perchè se cerco il 68 l'indice che mi restituisce è -9 e non 0, oppure se cerco il 22 mi da -3 come indice e non 3.
La documentazione dice espressamente:
Ovvero, l'array deve essere ordinato... del resto, l'algoritmo di ricerca binaria funziona solo se l'array è ordinato... se non lo è, l'unico modo per effettuare una ricerca è scorrere tutto l'array finchè non si trova l'elemento cercato o si raggiunge la fine dell'array...The array must be sorted
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
La spiegazione è chiarissima, basta consultare le API Arrays.binarySearch().
Se l'array NON è ordinato la funzione restituisce la posizione che l'elemento occuperebbe nel caso in cui l'array fosse ordinato.
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
ho capito, però a me non serve ordinare l'array di byte. Io ottengo un array di byte da una fonte e devo semplicemente controllare se due byte sono nella posizione che a me interessa, se li ordino perdo la posizione.
Ergo, la binarySearch() non ti serve a nulla.Originariamente inviato da hackerdm
ho capito, però a me non serve ordinare l'array di byte. Io ottengo un array di byte da una fonte e devo semplicemente controllare se due byte sono nella posizione che a me interessa, se li ordino perdo la posizione.
E non vedo nemmeno perchè scomodare la binarySearch() quando ciò che ti basta è una if...
Ciao.codice:if ((tuoArray[posizione_che_ti_interessa] == valore_che_ti_interessa) && (tuoArray[altraPosizione] == altro_valore)) { ... }![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
e se invece non conoscessi la posizione di un byte??
allora io ho uno stream di byte, l'intero stream è suddiviso in sezioni e devo andare a leggere il contenuto di ogni sezione es:
SOH - Inizio pacchetto
HEAD - Inizio Header
STX - Separa header dal messaggio
MSG - messaggio
ETX - Separa il messaggio dal body
BODY - Body
EOT - Termina il pacchetto
allora la prima parte di questo pacchetto, vale a dire SOH, HEAD e STX, hanno sempre la stessa posizione, cioè sono io a decidere quanti byte andranno ad occupare, e dove andarli a trovare (da xx a xx byte). Per quanto riguarda MSG, so dove inizia ma non so dove finisce, l'ETX e BODY non so nemmeno dove iniziano o finiscono, allora io avevo pensato o andarmi a cercare le posizioni di questi byte oppure fare un ciclo for e andarmi a trovare ciò che cerco. il problema è che il messaggio e il body possono essere abbastanza lunghi alle volte e non so se un ciclo for sia la soluzione giusta.