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