|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Sergey Babitch 2:5020/400 22 Aug 2007 16:21:10 To : Victor Sudakov Subject : Re: напечатать строку вместо кодов символов -------------------------------------------------------------------------------- Hi, Victor! On Wed, Aug 22, 2007 at 11:25:17AM +0000, Victor Sudakov wrote: [Skipped by Sergey Babitch] > > > Либо в bash есть встроенный printf? > > > Да. > > > > /usr/bin/printf "\xD0\xA0\xD1\x83\xD1\x87\xD0\xBA\xD0\xB8\xD0\xBD" > > xD0xA0xD1x83xD1x87xD0xBAxD0xB8xD0xBD> > > То-то и оно. > > > > printf "\xD0\xA0\xD1\x83\xD1\x87\xD0\xBA\xD0\xB8\xD0\xBD" > > пНяїяґпРпЛпЧ> > > Hеужели ничем из base system нельзя сделать нужное? Hу сделай на сях маленький бинарничек и считай что он живёт в base system ;) Опция '-static', это если нужно ну совсем ни от чего не зависмый... А так можно и без неё ;) ttyqg://vinny@burka:~/.Worker/tmp/4> make gcc -static -Wall -o Q Q.c echo "\xD0\xA0\xD1\x83\xD1\x87\xD0\xBA\xD0\xB8\xD0\xBD" | ./Q пНяїяґпРпЛпЧ ttyqg://vinny@burka:~/.Worker/tmp/4> cat Q.c #include <ctype.h> #include <string.h> #include <unistd.h> int main (void) { char buff[1024], *p, *q; ssize_t n; while ((n = read (0, buff, sizeof (buff) - 1)) > 0) { buff[n]='\0'; for (p = q = buff; *p; p++, q++) { if (*p == '\\' && p[1] == 'x' && isxdigit (p[2]) && isxdigit (p[3])) { ++p; *q = toupper(*++p) - (isalpha(*p) ? 'A'-10 : '0'); *q *= 16; *q += toupper(*++p) - (isalpha(*p) ? 'A'-10 : '0'); } else { *q = *p; } } *q = '\0'; write(1, buff, strlen (buff)); } return 0; } ttyqg://vinny@burka:~/.Worker/tmp/4> -- Good Luck! Sergey Babitch (SB551-RIPE) ICQ: 105517491 FreeLance Artist --- ifmail v.2.15dev5.4 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.unix.bsd/1963230a39cdf.html, оценка из 5, голосов 10
|