2016-12-20 4 views
-3

Ich habe versucht, diese Funktion zu verstehen. Liefert die folgende Funktion die Summe der ASCII-Werte von Zeichen in der Zeichenfolgen-URL? Keinememcpy für String zu int

int map(char* url) { 
    int key; 
    memcpy(key, url, sizeof(int)); 
    return key; 
} 
+0

was versuchen Sie zu erreichen? Inkrementieren von Buchstaben und/oder Zahlen? Sie können das über Anweisungen wie 'char c = 'A' tun; C++ 'und die Likes ... wohlgemerkt: Sobald Sie über 0x126 inkrementieren, werden Sie wieder mit 0x0 * (NUL) * beginnen - und es gibt ziemlich viele nicht druckbare Zeichen, bis Sie zu den druckbaren Zeichen gelangen ... – specializt

+1

Can Sie erklären, was Sie mit der Funktion machen wollen? – 599644

+1

Nein, es wird das erste Zeichen mal 2^(8 * 3) plus das zweite Zeichen mal 2^(8 * 2) plus das dritte Zeichen mal 2^(8 * 1) plus das vierte Zeichen mal 2^(8 * 0), angenommen "CHAR_BIT == 8" und "sizeof int == 4" und "strlen (url)> = 4". Eine andere Annahme von mir ist, dass Ihr Programm auf Big-Endian-Architektur läuft. Wenn es auf Little-Endian-Architektur läuft, wird das Ergebnis "Gegenteil" von dem sein, was ich erwähnte. Kurz gesagt, Ihr Code ist plattformabhängig (wegen des Endian-Ness-Problems, des Problems "sizeof int" und des Problems "CHAR_BIT"). –

Antwort

-1

, Es wird nicht die Summe zurückkehrt, wird es ASCII-Werte von 2 Zeichen von URL kopieren einzugeben, wenn eine Größe von int 2 ist, sonst wird es ASCII-Werte von 4 Zeichen von URL kopieren.

+0

Also wird es einfach kopieren ASCII-Wert von "http"? – tims

1

Nein. Ich werde einfach Bytes von url in Schlüssel kopieren. Genug um es zu füllen.
Jetzt können die ersten sizeof(int) Bytes von url als Ganzzahl neu interpretiert werden.

Es scheint wie eine sehr einfache Möglichkeit, numerische Schlüssel aus Strings zu generieren.

+0

Solange es Ihnen nichts ausmacht, dass alle Schlüssel gleich sind (für typische Web-URLs). –

+0

@MichaelGeary - Wenn Sie URLs in numerische Werte trennen wollen, die das verwendete Protokoll darstellen, sehe ich nicht, warum Sie etwas dagegen haben würden :) – StoryTeller

+1

Das klingt jetzt wirklich nützlich. Und natürlich zählen "http" und "https" als ein Protokoll. ;-) –