Re: hex2bin im string aufloesen
David Haller <[email protected]> Sun, 10 Apr 2011 17:08:29 +0200
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Organization | What? |
| Message-ID | <[email protected]> |
Hallo,
Am Sun, 10 Apr 2011, Thomas Moritz schrieb:
>Wie kann ich 'i2cget -y 0 0x27 0', dessen Ausgabe ich um 0x strippen=20
>muss, in den String einbauen? (statt FC)
>
>$(( `i2cget -y 0 0x27 0 | cut -d 'x' -f2` ))
>
>passt da wohl nicht ganz, seidenn ich habe mich in der Nacht vertippt.=20
>Es ist prinzipiell nicht wichtig, aber interessant waere es schon :-)
bin=3D$(
{ echo "ibase=3D16; obase=3D2;";
i2cget -y 0 0x27 0 | cut -d 'x' -f2 | tr '[a-f]' '[A-F]'
} | bc)
das 'tr' nur zur Sicherheit, weil bc nur Uppercase-Hex-A-F frisst,
und ich i2cget nicht kenne, ob das nicht evtl. auch mal lowercase
ausgibt. Getestet mit:
{ echo "ibase=3D16; obase=3D2;"; echo "0xFC" | cut -d 'x' -f2; } | bc
11111100
BTW: wenn du direkt noch was vor dem Bin-String haben willst kannst du
auch das 'print' von bc verwenden, bspw:
$ { echo -n "ibase=3D16; obase=3D2; b=3D";=20
echo "0xFC" | cut -d 'x' -f2;
echo 'print "foo\n", b, "b\nfoobar\n"'; } | bc
foo
11111100b
foobar
Alternativ oder sogar besser:
printf 'ibase=3D16; obase=3D2; b=3D%s;
print "foo\n", b, "b\nbar\n"\n' \
"$(echo "0xFC" | cut -d 'x' -f2 | tr '[a-f]' '[A-F]')" \
| bc
Die inneren "\n" (in den "") sind jew. f=FCr die Umbr=FCche, die bc als
'\n' zu sehen und somit als Umbr=FCche ausgeben soll, die '\n' (in '')
sind f=FCr die Eingabe an bc. Anders formatiert:
printf 'ibase=3D16;
obase=3D2;
b=3D%s;
print "foo\n", b, "b\nbar\n";
' "$(echo "0xFC" | cut -d 'x' -f2 | tr '[a-f]' '[A-F]')" \
| bc
Oder =FCbersichtlicher mit Shell-Variable, daf=FCr ohne bc-Variable ("b"):
HEX=3D"$(echo "0xFC" | cut -d 'x' -f2 | tr '[a-f]' '[A-F]')";
BIN=3D"$(printf 'ibase=3D16; obase=3D2; print "foo:", %s, "b:bar\n";\n' "$H=
EX" | bc)"
$ echo $BIN
foo:11111100b:bar
Oder:
BINFMT=3D'ibase=3D16; obase=3D2; print "foo:", %s, "b:bar\n";\n';
HEX=3D"$(echo "0xFC" | cut -d 'x' -f2 | tr '[a-f]' '[A-F]')";
BIN=3D"$(printf "$BINFMT" "$HEX" | bc)"
Ich hoffe, du kannst dir damit was les- und wartbares mit basteln ;)
HTH,
-dnh
--=20
"Lege die eine Hand in die Gefriertruhe und die andere auf eine
hei=DFe Herdplatte. Im Durchschnitt ist das dann ein angenehmes
Gef=FChl." [CB's Lehrer erklaert den "Durchschnitt"]