Karakter=>kód

Hogy kaphatnál meg egyszerűen sh-ban egy eszközdrl olvasott karakter kódját úgy, hogy számolni lehessen vele?

A konkrét szituáció: egy ASUS WL-500g Premium routeren, openwrt firmware-en szeretnék funkciókat rendelni az EZSetup és a Restore gombokhoz. Úgy tűnik, a gombok felengedett/lenyomott állapotát a /dev/gpio/in eszközről olvasott bájt alulról 1., ill. 5. bitjéből lehet megtudni, viszont a többi bit általam ismeretlen okokból nem mindig ugyanaz. Tehát egy innen olvasott karakter kódjával kéne bitenkénti műveleteket végeznem.

Mivel egy beágyazott eszközről van szó, minél egyszerűbben szeretném megoldani, és csak a busybox ash és néhány segédprogram áll rendelkezésre.

Hozzászólások

Workaround (nem ismerem a shelleket): crossplatform gcc-vel lefordítod - esetedben mipsel platformra - az alábbi kétsoros c programot, ami megoldja a problémát.


#include <stdio.h>
int main() { printf("%d", getchar()); }

Nem tudom a busybox-ba bele van-e forditva, vagy onalloan elerheto a printf nevu parancs. Ha igen, akkor igy (vigyazat, kisse trukkos):
$ printf '%d\n' '"A"'
65

vagy "'a'" formaban is lehet, de a lenyeg kell a belso idezojel/aposztrof *is*.

Amugy meg szerintem van azon a dogon perl is, az is tud ugyanilyet. Vagy:
$ echo -n A | od -d
0000000 65
0000001

Szoval van par eszkoz, nyilvan az a kerdes, ezekbol melyik van a routereden.