Live Support My forum, my way! Il forum dei newsgroup: Linux » Bash lettura binaria e conversione in numero
My forum, my way! Il forum dei newsgroup
Fast Uncompromising Discussions.Newsgroup FUDforum will get your users talking.

Loading
Utenti      F.A.Q.    Registrati    Login    Home
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 Messaggio successivo
sergio  è attualmente disconnesso 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 #39822 è una risposta a message #39820] ven, 24 giugno 2011 20:06 Messaggio precedenteMessaggio successivo
mallin.shetland  è attualmente disconnesso mallin.shetland
Messaggi: 129
Registrato: novembre 2010
Senior Member
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.



Addì venerdì 24 giugno 2011 19:46 sergio scrisse:

> 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?

Non volevi leggere un file binario e scriverlo in ASCII?
Molto coerente, fai il contrario di ciò che dici.


PS man printf
Re: Bash lettura binaria e conversione in numero [messaggio #39823 è una risposta a message #39820] ven, 24 giugno 2011 20:39 Messaggio precedenteMessaggio successivo
crunch  è attualmente disconnesso 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 #39824 è una risposta a message #39820] ven, 24 giugno 2011 22:18 Messaggio precedenteMessaggio successivo
Dalet  è attualmente disconnesso Dalet
Messaggi: 210
Registrato: novembre 2010
Senior Member
Il 24-06-2011, sergio dice:

>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?

Penso ti convenga seguire i consigli che t'han gia' dato,
ma se vuoi provare (tentar non nuoce) vedi "od --help"
oppure man od, o anche "info coreutils 'od invocation'".
Anche dd fa qcs del genere per certi versi, infine guardati
hexdump (sempre man o --help o prova info blablabla).

Se poi invece posti la stringa da elaborare magari (basta
un esempio) anche altri piu' pratici di me te la traducono
al volo nel formato che vuoi.

--
Saluti, Dalet
Re: Bash lettura binaria e conversione in numero [messaggio #39844 è una risposta a message #39822] sab, 25 giugno 2011 19:36 Messaggio precedenteMessaggio successivo
sergio  è attualmente disconnesso sergio
Messaggi: 16
Registrato: giugno 2009
Junior Member
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
Re: Bash lettura binaria e conversione in numero [messaggio #39853 è una risposta a message #39844] dom, 26 giugno 2011 09:20 Messaggio precedenteMessaggio successivo
mallin.shetland  è attualmente disconnesso mallin.shetland
Messaggi: 129
Registrato: novembre 2010
Senior Member
Addì sabato 25 giugno 2011 19:36 sergio scrisse:

> Purtroppo è un'applicativo che deve funzionare anche senza perl....

1) Usa AWK, PYthon, Ruby, C...

2) Risposta del cavolo. Mentre perl è presente in tutte le
installazioni Unix, BASH non è installata in tutti i siatemi
come Solaris, e i sistemi basati su busybox.
Re: Bash lettura binaria e conversione in numero [messaggio #39854 è una risposta a message #39853] dom, 26 giugno 2011 11:50 Messaggio precedenteMessaggio successivo
Marco  è attualmente disconnesso Marco
Messaggi: 226
Registrato: giugno 2007
Senior Member
On Sun, 26 Jun 2011 09:20:17 +0200 "mallin.shetland" <nobody@nowhere.es>
wrote:

> 2) Risposta del cavolo. Mentre perl è presente in tutte le
> installazioni Unix, BASH non è installata in tutti i siatemi
> come Solaris, e i sistemi basati su busybox.

Ah si'? I sistemi basati su busybox hanno perl? Interessante.

--
Cio' che si vede, e'.
Re: Bash lettura binaria e conversione in numero [messaggio #39871 è una risposta a message #39844] lun, 27 giugno 2011 12:29 Messaggio precedenteMessaggio successivo
sergio  è attualmente disconnesso 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 #39874 è una risposta a message #39871] lun, 27 giugno 2011 13:07 Messaggio precedenteMessaggio successivo
Andrea B.  è attualmente disconnesso Andrea B.
Messaggi: 68
Registrato: novembre 2010
Member
Il 27/06/2011 12:29, sergio ha scritto:
>
> Ora questi due caratteri li ho nella variabile BinNum. Come faccio a
> convertire questi due caratteri nel numero che cerco???

valore = 0
for i in 1 2
do
if ${BinNum:i:1) = "1"
then
let valore=valore + 2^(i-1)
fi
done
Re: Bash lettura binaria e conversione in numero [messaggio #39875 è una risposta a message #39871] lun, 27 giugno 2011 13:58 Messaggio precedenteMessaggio successivo
Dalet  è attualmente disconnesso 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 #39877 è una risposta a message #39874] lun, 27 giugno 2011 13:34 Messaggio precedenteMessaggio successivo
Roberto  è attualmente disconnesso Roberto
Messaggi: 892
Registrato: maggio 2009
Senior Member
Andrea B. ha scritto:
> Il 27/06/2011 12:29, sergio ha scritto:
>> Ora questi due caratteri li ho nella variabile BinNum. Come faccio a
>> convertire questi due caratteri nel numero che cerco???
>
> valore = 0
> for i in 1 2
> do
> if ${BinNum:i:1) = "1"
> then
> let valore=valore + 2^(i-1)
> fi
> done

Se ho capito bene, per binario lui intende un intero, con segno o
senza segno.
Altrimenti, con due caratteri, se la cava con tre if. :-)

E io non lo saprei fare di sola bash, almeno un od -d
--
|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 #39883 è una risposta a message #39820] lun, 27 giugno 2011 15:59 Messaggio precedenteMessaggio successivo
Giacomo Boffi  è attualmente disconnesso Giacomo Boffi
Messaggi: 38
Registrato: novembre 2010
Member
sergio <s.tardioli@binapg.it> writes:

> come faccio a convertire questa stringa (contenente caratteri ascii)
> in numero?

aggiungi un po' di gestione errori (caratteri divesi da 0 o 1,
overflow, etc)

% bin_to_10 () { b=$1 ; res=0 ; powoftwo=1
while [ $b ] ; do
last=${b: -1}
b=${b/%$last/}
res=$(($res + $powoftwo * $lastt))
powoftwo=$(($powoftwo * 2))
done; echo $res
}
% bin_to_10 10010110
150
%

--
UN CADAVERE NEL PIATTO! -- Elena, in IFQ
Re: Bash lettura binaria e conversione in numero [messaggio #39885 è una risposta a message #39877] lun, 27 giugno 2011 15:59 Messaggio precedenteMessaggio successivo
Andrea B.  è attualmente disconnesso Andrea B.
Messaggi: 68
Registrato: novembre 2010
Member
Il 27/06/2011 13:34, roberto ha scritto:
> Andrea B. ha scritto:
>> Il 27/06/2011 12:29, sergio ha scritto:
>>> Ora questi due caratteri li ho nella variabile BinNum. Come faccio a
>>> convertire questi due caratteri nel numero che cerco???
>>
>> valore = 0
>> for i in 1 2
>> do
>> if ${BinNum:i:1) = "1"
>> then
>> let valore=valore + 2^(i-1)
>> fi
>> done
>
> Se ho capito bene, per binario lui intende un intero, con segno o
> senza segno.

se mette i valori dei due caratteri in due variabili separate tipo:
v1 e v2 potrebbe fare una cosa tipo

let ms=$(($(printf "%d" \'"$v1")*256))
let ls=$(($(printf "%d" \'"$v2")))

echo $(($ms+$ls))
Re: Bash lettura binaria e conversione in numero [messaggio #39886 è una risposta a message #39883] lun, 27 giugno 2011 16:05 Messaggio precedenteMessaggio successivo
Giacomo Boffi  è attualmente disconnesso Giacomo Boffi
Messaggi: 38
Registrato: novembre 2010
Member
Giacomo Boffi <giacomo.boffi@polimi.it> writes:

errore di battitura!

> % bin_to_10 () { b=$1 ; res=0 ; powoftwo=1
> while [ $b ] ; do
> last=${b: -1}
> b=${b/%$last/}
> res=$(($res + $powoftwo * $lastt))
$last
> powoftwo=$(($powoftwo * 2))
> done; echo $res
> }
Re: Bash lettura binaria e conversione in numero [messaggio #39887 è una risposta a message #39883] lun, 27 giugno 2011 16:08 Messaggio precedenteMessaggio successivo
Giacomo Boffi  è attualmente disconnesso Giacomo Boffi
Messaggi: 38
Registrato: novembre 2010
Member
Giacomo Boffi <giacomo.boffi@polimi.it> writes:

lo spazio è NECESSARIO

> % bin_to_10 () { b=$1 ; res=0 ; powoftwo=1
> while [ $b ] ; do
> last=${b: -1}
______-^-______
> b=${b/%$last/}
> res=$(($res + $powoftwo * $last))
> powoftwo=$(($powoftwo * 2))
> done; echo $res
> }
Re: Bash lettura binaria e conversione in numero [messaggio #39889 è una risposta a message #39871] lun, 27 giugno 2011 16:48 Messaggio precedenteMessaggio successivo
crunch  è attualmente disconnesso 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 Messaggio precedenteMessaggio successivo
sergio  è attualmente disconnesso 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 Messaggio precedenteMessaggio successivo
Roberto  è attualmente disconnesso 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 Messaggio precedenteMessaggio successivo
Luca Pascali  è attualmente disconnesso 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 Messaggio precedente
crunch  è attualmente disconnesso 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!
Argomento precedente:ubuntu 8.1 firefox - sparite le icone di chiusura
Argomento successivo:Schermo lampeggiante grigio/blu
Vai al forum:
  


Ora corrente: gio apr 25 07:44:35 CEST 2024

Tempo totale richiesto per generare la pagina: 0.01327 secondi
.:: Contatti :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Live Support