2016-12-20 4 views
-3

J'essayais de comprendre cette fonction. Est-ce que la fonction suivante retournera la somme des valeurs ASCII des caractères dans l'URL de la chaîne?memcpy pour string à int

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

qu'essayez-vous d'atteindre? Incrémentation de lettres et/ou de chiffres? Vous pouvez le faire via des instructions comme 'char c = 'A'; C++ 'et les goûts ... attention: une fois que vous avez dépassé 0x126, vous recommencez avec 0x0 * (NUL) * - et il y a quelques caractères non-imprimables jusqu'à ce que vous arriviez aux caractères imprimables ... – specializt

+1

Can vous expliquez ce que vous voulez que la fonction fasse? – 599644

+1

Non, il retournera le premier caractère fois 2^(8 * 3) plus le deuxième caractère fois 2^(8 * 2) plus le troisième caractère fois 2^(8 * 1) plus le quatrième caractère fois 2^(8 * 0), en supposant que 'CHAR_BIT == 8' et' sizeof int == 4' et 'strlen (url)> = 4'. Une autre hypothèse est que votre programme fonctionne sur l'architecture Big-Endian. S'il fonctionne sur l'architecture Little-Endian, alors le résultat sera "opposé" à ce que j'ai mentionné. Donc, en résumé, votre code dépend de la plateforme (à cause du problème endian-ness, du problème 'sizeof int' et du problème' CHAR_BIT'). –

Répondre

-1

Non, il ne reviendra pas la somme, il copie des valeurs ASCII de 2 caractères d'URL pour clé si la taille de int est 2, sinon il copie des valeurs ASCII de 4 caractères url.

+0

Donc, va-t-il simplement copier la valeur ASCII de "http"? – tims

1

Non. Je copierai simplement des octets de url dans la clé. Assez pour le remplir.
Maintenant, le premier sizeof(int) octets de url peut être réinterprété comme un nombre entier.

Il semble être un moyen très simple de générer des clés numériques à partir de chaînes.

+0

Tant que cela ne vous dérange pas toutes les clés étant les mêmes (pour les URL Web typiques). –

+0

@MichaelGeary - Si votre but est de séparer les URL en valeurs numériques qui représentent le protocole utilisé, je ne vois pas pourquoi cela vous dérangerait :) – StoryTeller

+1

Maintenant, cela semble vraiment utile. Et bien sûr, 'http' et' https' comptent comme un seul protocole. ;-) –