Hexer in Perl

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Hexer in Perl

Beitrag von linuxCowboy » 26.01.2014 18:59:02

Ich moechte euch meine neuesten Aliase vorstellen:

Code: Alles auswählen

alias hx='perl -ne'\''printf "%*vX\n"," ","$_"'\'
alias hxr="perl -ne'for(split){print chr hex}'"
Es gibt da dieses "vector flag". Das muss sich ein Genie ausgedacht haben. Ist so naheliegend! Aber nicht mal Thompson und Ritchie sind draufgekommen.

Code: Alles auswählen

911 0 /tmp $ echo Perl ist das Groeste | hx
50 65 72 6C 20 69 73 74 20 64 61 73 20 47 72 6F 65 73 74 65 A
912 0 /tmp $ 
912 0 /tmp $ echo Perl ist das Groeste | hx | hxr
Perl ist das Groeste
Ich hatte mir frueher einen Hexer in C geschrieben.

Jetzt schreibe ich hier einen Hexer in EINER ZEILE Perl!!

... alles kaum zu glauben
-der_linux_cowboy --- Besser werden! ... f*** w$$

wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

Re: Hexer in Perl

Beitrag von wanne » 27.01.2014 00:42:20

IO in C hat immer ein bisschen overhead außerdem hat man eben immer eine Grundliegende Struktur (main()...). Aber wirklich viel groß ist das da auch nicht.

Code: Alles auswählen

#include <stdio.h>
main(){char b,l;lb: l=fread(&b,1,1,stdin);if(l&&printf("%x ",b)) goto lb;}
Das meiste sind da halt die Schlüsselworte,name include,main,stdiom,fread,printf. Aber da geht bestimmt nochmal einiges.
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

Re: Hexer in Perl

Beitrag von wanne » 27.01.2014 00:59:52

So das schenkt sich fast nichts mehr zu perl und wird vom gcc auch noch gefressen:

Code: Alles auswählen

main(){for(int b;read(0,&b,1);)printf("%x ",b);}
Aber nützlich wird C, wenn man eben ein bisschen mehr will und da ein paar Optionen mit einbaut, die dann zb. auch ins 10 System umrechnen. perl ist halt genau auf sowas optimiert. String rein / manipulierter String raus. Und das möglichst schnell.
C will effizient, allmächtig und modularisierbar sein.

Sonst

Code: Alles auswählen

hexdump -v -e '/1 "%02X "'
rot: Moderator wanne spricht, default: User wanne spricht.

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Hexer in Perl

Beitrag von linuxCowboy » 27.01.2014 01:56:12

Dein C-Code kann sich sehen lassen!

so laueft er ohne Fehler:

Code: Alles auswählen

int main(){for(unsigned char b;read(0,&b,1);)printf("%x ",b);}
compiler:

Code: Alles auswählen

gcc -include stdio.h -include sys/unistd.h -std=c99 -o hxc hxc.c
Ich komme von C. Ist mir heute zu aufwendig und umstaendlich. Was habe ich gedocktert an solchen Systemutils!
Heute mit bash und Perl und regex flutscht das wie von selbst. :facepalm:
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
shoening
Beiträge: 914
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Hexer in Perl

Beitrag von shoening » 27.01.2014 07:21:17

Hi,

fuer hexdumps gibt es doch in Debiancorutils od.

Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

wanne
Moderator
Beiträge: 7548
Registriert: 24.05.2010 12:39:42

Re: Hexer in Perl

Beitrag von wanne » 27.01.2014 08:59:03

linuxCowboy hat geschrieben:Heute mit bash und Perl und regex flutscht das wie von selbst. :facepalm:
Wie gesagt für jeden Zweck die richtige Sprache. Versuch mal ein Egoshooter oder ein Betriebssystem in perl zu schreiben...

Sonst mein programm compiliert auch. Nimmt man while statt vor sogar ganz ohne optionen. (Bruacht dann aber ein Zeichen länger.) War ja nicht auf sonderlich leserlich ausgelegt.
rot: Moderator wanne spricht, default: User wanne spricht.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Hexer in Perl

Beitrag von roli » 27.01.2014 10:30:09

Code: Alles auswählen

alias d2h="perl -e 'printf qq|%X\n|, int( shift )'"
alias d2o="perl -e 'printf qq|%o\n|, int( shift )'"
alias d2b="perl -e 'printf qq|%b\n|, int( shift )'"
alias h2d="perl -e 'printf qq|%d\n|, hex( shift )'"
alias h2o="perl -e 'printf qq|%o\n|, hex( shift )'"
alias h2b="perl -e 'printf qq|%b\n|, hex( shift )'"
alias o2h="perl -e 'printf qq|%X\n|, oct( shift )'"
alias o2d="perl -e 'printf qq|%d\n|, oct( shift )'"
alias o2b="perl -e 'printf qq|%b\n|, oct( shift )'"
alias b2d="perl -e 'printf qq|%d\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2h="perl -e 'printf qq|%X\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
alias b2o="perl -e 'printf qq|%o\n|, unpack("N", pack("B32", substr("0" x 32 . 1101 , -32)))'"
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Hexer in Perl

Beitrag von linuxCowboy » 27.01.2014 16:04:55

shoening hat geschrieben: fuer hexdumps gibt es doch in Debiancorutils od.
od ist einer der seltenen Faelle, wo ich ein externes Programm den coreutils vorziehe. hexdump ist mein Standard-Dumper, und ueber den Softlink hd aufgerufen ist -C voreingestellt und man braucht nicht mal einen Alias!
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Hexer in Perl

Beitrag von linuxCowboy » 27.01.2014 16:41:49

Code: Alles auswählen

perl -E'say substr("0" x 32 . $ARGV[0] , -32)' 101110 # 32bit
00000000000000000000000000101110
finde ich originell!

Da lege ich doch mal nach:

Code: Alles auswählen

perl -e '$i=shift;printf "%d  %f  0x%x  0b%b  0%o \n",$i,$i,$i,$i,$i' 12345
12345  12345.000000  0x3039  0b11000000111001  030071
-der_linux_cowboy --- Besser werden! ... f*** w$$

Antworten