C - strings xor

0664jester

Mitglied
Hallo,

Code:
#include <stdio.h>



int main() 
{
  int o = '!9+!' 
        ^ '!hxd';
  printf("%s\n", &o);
  return (o ^ o);
}


Gibt "QSP" aus.

Aber wie kommts dazu?
Ich denke mir, dass ein String nur in Zahlen rechnen kann und für jede Zahl ist ein ASCII-zugewiesen, somit bekommt man die Buchstaben.

Ich weiß aber nicht, wie das im Hintergrund abläuft.
Ich kenne XOR nur mit 1 und 0, aber ein rufzeichen hat die nummer 33 im ASCII.

Wie funktioniert das? Nach was muss ich googln?


Gruß
 
Die 33 binär ist...? Genau, nur 0er und 1er.

Abgesehen davon ist der Code sowas von krautfalsch.
Sorry, aber was soll der eigentlich machen?
 
Hi.

multi-char Literale :)suchen:) sind implementierungsspezifisch. Man kann also gar nicht genau sagen was passieren wird.

Du wendest also den xor Operator auf 2 (mehr oder weniger) zufällige int Werte an.

Dann versuchst du den resultierenden int als String auszugeben... was nicht viel Sinn macht - dein Glück, dass dort irgendwo eine \0 steht die den "String" terminiert.

Ein mögliche Erklärung:

'!9+!' ist in ASCII die Folge von Bytes [33, 57, 43, 33], binär also

0010 0001 0011 1001 0010 1011 0010 0001

'!hxd' ergibt analog:

0010 0001 0110 1000 0111 1000 0110 0100

XOR(..):

0000 0000 0101 0001 0101 0011 0100 0101

ergibt in ASCII (dezimal):

0 81 82 69

in ASCII Text:

\0 Q S E

(keine Gewähr auf Richtigkeit, evtl. hab ich da einen Fehler drin)
 
Kleine Korrektur in Byte-Spielereien...
Der gcc scheint multicharacter literals so zu interpretieren:
Code:
'!9+!'
'!'      '9'      '+'      '!'
0x21     0x39     0x2b     0x21
00100001 00111001 00101011 00100001
XOR
'!hxd'
'!'      'h'      'x'      'd'
0x21     0x68     0x78     0x64         
00100001 01101000 01111000 01100100
==
00000000 01010001 01010011 01000101
0x00     0x51     0x53     0x45
'\0'     'Q'      'S'      'E'

== "\0QSE" (MSB)
== "ESQ\0" (LSB)

Wie deepthroat sagte: das ist implementation-defined.
 

Neue Beiträge

Zurück