Loading
Home » Computer » Linux » Bash lettura binaria e conversione in numero
Bash lettura binaria e conversione in numero [messaggio #39820] |
ven, 24 giugno 2011 19:46 |
sergio Messaggi: 16 Registrato: giugno 2009 |
Junior Member |
|
|
Salve a tutti
Sto cercando tramite script bash, di leggere un file ed estrarre un
valore scritto in binario.
Tramite l'opzione di estrazione da una stringa echo ${String:32:2},
riesco ad inserire in un'altra i caratteri che cerco.
Ora, come faccio a convertire questa stringa (contenente caratteri
ascii) in numero?
Grazie
Sergio
|
|
| |
Re: Bash lettura binaria e conversione in numero [messaggio #39823 è una risposta a message #39820] |
ven, 24 giugno 2011 20:39 |
crunch Messaggi: 48 Registrato: novembre 2010 |
Member |
|
|
Il Fri, 24 Jun 2011 10:46:29 -0700, sergio ha scritto:
> Salve a tutti
>
> Sto cercando tramite script bash, di leggere un file ed estrarre un
> valore scritto in binario.
> Tramite l'opzione di estrazione da una stringa echo ${String:32:2},
> riesco ad inserire in un'altra i caratteri che cerco.
>
> Ora, come faccio a convertire questa stringa (contenente caratteri
> ascii) in numero?
>
> Grazie
>
> Sergio
Se ho capito bene, data una stringa contenente una rappresentazione
binaria di un numero vorresti convertirla in decimale
In questo caso ti puo' aiutare bc
man bc
per es il numero 8
echo 'ibase=2;obase=A;1000' | bc
--
..,¸¸,ø¤º°°º¤ø,¸_¸cRuncH.,¸¸,ø¤º°°º¤ø, ¸_¸
and....yes, we crunch
Questa potrebbe davvero essere la scintilla che fa traboccare la goccia.
-- Fabio Noaro, telecronista sportivo, ripreso in
"Mai Dire Gol"
|
|
| | | | |
Re: Bash lettura binaria e conversione in numero [messaggio #39871 è una risposta a message #39844] |
lun, 27 giugno 2011 12:29 |
sergio Messaggi: 16 Registrato: giugno 2009 |
Junior Member |
|
|
On Jun 25, 7:36 pm, sergio <s.tardi...@binapg.it> wrote:
> On 24 Giu, 20:06, "mallin.shetland" <nob...@nowhere.es> wrote:
>
> > Addì venerdì 24 giugno 2011 19:46 sergio scrisse:
>
> > > Sto cercando tramite script bash, di leggere un file ed estrarre un
> > > valore scritto in binario.
>
> > Senza saper né leggere né scrivere, usa PERL, la bash non è
> > adatta per fare tutto.
>
> Purtroppo è un'applicativo che deve funzionare anche senza perl....
>
> Grazie comunque della risposta
No, ragazzi, sono proprio alla frutta!!!!!
Ho un file dal quale devo estrarre un numero binario del quale so la
posizione
FileRead=$(cat /path/nome_file) # legge il file binario e
lo mette in FileRead
BinNum=`echo ${FileRead:33:2}` # Estrae dal file i bite 33 e
34 e li mette dentro BinNum
Ora questi due caratteri li ho nella variabile BinNum. Come faccio a
convertire questi due caratteri nel numero che cerco???
Ho provato con i suggerimenti di crunch e dalet, ma non funzionano.
Per quanto riguarda il suggerimento di mallin.shetland non posso
utilizzarlo, in quanto non so (e non posso correre il rischio) che non
ci sia perl installato.
Devo farlo per forza (se mi date una mano) in bash
|
|
| |
Re: Bash lettura binaria e conversione in numero [messaggio #39875 è una risposta a message #39871] |
lun, 27 giugno 2011 13:58 |
Dalet Messaggi: 210 Registrato: novembre 2010 |
Senior Member |
|
|
Il 27-06-2011, sergio dice:
>No, ragazzi, sono proprio alla frutta!!!!!
[....................]
>Ho provato con i suggerimenti di crunch e dalet, ma non funzionano.
Secondo me dovresti dare un esempio concreto di tutto
questo che dici, cioe' di' cosa sono, un caso di questi
due caratteri, perche' i caratteri (praticamente byte con
macchine intel) in origine possono essere valori numerici
espressi in molti modi, esempio magari da te e' in ottale,
e poi echo ci aggiunge pure i \n, non c'hai pensato?
Esempio.
pippo=123; echo $pippo:1:1} | hexdump -C
00000000 32 0a |2.|
00000002
dunque ti da' gli esadecimali: 32 che e' il 2 ascii piu'
lo 0a che e' appunto il newline.
Tu devi dire in che *formato* vuoi l'uscita finale e magari
pure per cosa ti servono o cosa ci devi fare.
E poi anche l'ingresso puo' rappresentare diverse cose,
specie trattandosi d'un file binario.
--
Saluti, Dalet
|
|
| | | | | |
Re: Bash lettura binaria e conversione in numero [messaggio #39889 è una risposta a message #39871] |
lun, 27 giugno 2011 16:48 |
crunch Messaggi: 48 Registrato: novembre 2010 |
Member |
|
|
Il Mon, 27 Jun 2011 03:29:38 -0700, sergio ha scritto:
>
>
> Ora questi due caratteri li ho nella variabile BinNum. Come faccio a
> convertire questi due caratteri nel numero che cerco???
Facendo seguito a quanto detto prima
BinNum=10 ; echo "ibase=2;$BinNum" | bc
diversamente concordo con chi ti chiede di spiegare meglio cosa intendi
--
..,¸¸,ø¤º°°º¤ø,¸_¸cRuncH.,¸¸,ø¤º°°º¤ø, ¸_¸
and....yes, we crunch
Favola russa. C'era una vodka...
-- Gino Patroni
|
|
|
Re: Bash lettura binaria e conversione in numero [messaggio #39892 è una risposta a message #39844] |
lun, 27 giugno 2011 16:40 |
sergio Messaggi: 16 Registrato: giugno 2009 |
Junior Member |
|
|
On 25 Giu, 19:36, sergio <s.tardi...@binapg.it> wrote:
> On 24 Giu, 20:06, "mallin.shetland" <nob...@nowhere.es> wrote:
>
> > Addì venerdì 24 giugno 2011 19:46 sergio scrisse:
>
> > > Sto cercando tramite script bash, di leggere un file ed estrarre un
> > > valore scritto in binario.
>
> > Senza saper né leggere né scrivere, usa PERL, la bash non è
> > adatta per fare tutto.
>
> Purtroppo è un'applicativo che deve funzionare anche senza perl....
>
> Grazie comunque della risposta
Il problema è questo:
devo leggere un file binario da dove devo estrarre, in posizioni che
conosco, dei valori che possono essere o interi, o lunghi ecc.
Nel caso specifico devo estrarre dalla byte 33 e 34, i valori che mi
ritorneranno un intero e che mi dicono lo spostamento di un altro
record nel file.
|
|
|
Re: Bash lettura binaria e conversione in numero [messaggio #39895 è una risposta a message #39892] |
lun, 27 giugno 2011 18:09 |
Roberto Messaggi: 892 Registrato: maggio 2009 |
Senior Member |
|
|
sergio ha scritto:
> On 25 Giu, 19:36, sergio <s.tardi...@binapg.it> wrote:
>> On 24 Giu, 20:06, "mallin.shetland" <nob...@nowhere.es> wrote:
>>
>>> Addì venerdì 24 giugno 2011 19:46 sergio scrisse:
>>>> Sto cercando tramite script bash, di leggere un file ed estrarre un
>>>> valore scritto in binario.
>>> Senza saper né leggere né scrivere, usa PERL, la bash non è
>>> adatta per fare tutto.
>> Purtroppo è un'applicativo che deve funzionare anche senza perl....
>>
>> Grazie comunque della risposta
>
> Il problema è questo:
>
> devo leggere un file binario da dove devo estrarre, in posizioni che
> conosco, dei valori che possono essere o interi, o lunghi ecc.
Allora bash da solo non basta.
Che ambiente hai?
Quali comandi "standard" hai a disposizione?
--
|Save our planet!
Ciao |Save wildlife!
roberto |For your E-MAIL use ONLY recycled Bytes !!
|roberto poggi rpoggi@softhome.net
|
|
|
Re: Bash lettura binaria e conversione in numero [messaggio #39914 è una risposta a message #39895] |
lun, 27 giugno 2011 22:47 |
Luca Pascali Messaggi: 44 Registrato: maggio 2011 |
Member |
|
|
On Mon, 27 Jun 2011 18:09:01 +0200, roberto wrote:
[...]
>>
>> Il problema è questo:
>>
>> devo leggere un file binario da dove devo estrarre, in posizioni che
>> conosco, dei valori che possono essere o interi, o lunghi ecc.
>
> Allora bash da solo non basta.
>
> Che ambiente hai?
> Quali comandi "standard" hai a disposizione?
Quoto.
Uno script in Python è di sicuro più semplice da scrivere.
Ad esempio (codice alla brutta, si può rendere molto più bello):
--8<---cut---
f = open("ciccio.txt","rb")
f.seek(33)
bh = ord(f.read(1))
bl = ord(f.read(1))
pw = bh*256+bl # word senza segno, little-endian
f.close()
--8<---cut---
oppure, un po' più sofisticato:
--8<---cut---
import struct
#apri il file
f = open("ciccio.txt","rb")
#vai al byte 33, please
f.seek(33)
# leggi 2 byte
s = f.read(2)
# Il file non mi serve più, chiudilo pure
f.close()
# prendi il valore interpretandolo come word senza segno
pw_le = struct.unpack("H",s)[0]
--8<---cut---
Casomai python non fosse disponibile, un programmino in c si scrive e si
compila in pochi secondi.
--8<---cut---
#include <stdio.h>
#include <stdlib.h>
int main(void) {
FILE *fp;
unsigned short pw;
fp = fopen("ciccio.txt","rb");
fseek(fp, 33, SEEK_SET);
fread(&pw, 2, 1, fp);
fclose(fp);
printf("Il valore è %u\n",pw);
return 0;
}
--8<---cut---
La compilazione porta ad un eseguibile solo da 7kB che lanciato ti
fornisce subito il risultato, senza scomodare altri programmi come awk,
hexdump et simili.
Come è già stato detto, bash fa tanto, ma non è questo il suo lavoro.
Luca
|
|
|
Re: Bash lettura binaria e conversione in numero [messaggio #39922 è una risposta a message #39892] |
mar, 28 giugno 2011 09:04 |
crunch Messaggi: 48 Registrato: novembre 2010 |
Member |
|
|
Il Mon, 27 Jun 2011 07:40:16 -0700, sergio ha scritto:
> Nel caso specifico devo estrarre dalla byte 33 e 34, i valori che mi
> ritorneranno un intero e che mi dicono lo spostamento di un altro record
> nel file.
quindi ricapitolando, data una stringa contenente due caratteri vorresti
ottenere il loro valore corrispondente sulla tabella ascii
io procederei singolarmente in questo modo
BinNum=F ; printf '%d\n' "'$BinNum"
BinNum2=5 ; printf '%d\n' "'$BinNum2"
domanda: a che serve?
--
..,¸¸,ø¤º°°º¤ø,¸_¸cRuncH.,¸¸,ø¤º°°º¤ø, ¸_¸
and....yes, we crunch
Meeting al Club Paranoia venerdi' prossimo. Ora... prova a trovare
dove!
|
|
|
Vai al forum:
Ora corrente: sab ott 05 17:19:27 CEST 2024
Tempo totale richiesto per generare la pagina: 0.02279 secondi
|