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"]