2016-12-20 6 views
-3

Я пытался понять эту функцию. Будет ли следующая функция возвращать сумму значений ASCII символов в строке url?memcpy для строки до int

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

Что вы пытаетесь достичь? Увеличение букв и/или цифр? Вы можете сделать это с помощью операторов типа 'char c = 'A'; C++ 'и симпатии ... помните: как только вы увеличиваете прошлое 0x126, вы снова начинаете с 0x0 * (NUL) * - и есть немало непечатаемых символов, пока вы не доберетесь до печатных ... – specializt

+1

Can вы объясните, что вы хотите, чтобы функция выполняла? – 599644

+1

Нет, он вернет первый символ раз 2^(8 * 3) плюс второй символ времени 2^(8 * 2) плюс третий символ времени 2^(8 * 1) плюс четвертый символ раз 2^(8 * 0), предполагая 'CHAR_BIT == 8' и' sizeof int == 4' и 'strlen (url)> = 4'. Другое предположение о том, что ваша программа работает на архитектуре Big-Endian. Если он будет работать на архитектуре Little-Endian, тогда результат будет «противоположным» тому, что я упомянул. Поэтому, короче говоря, ваш код зависит от платформы (из-за проблемы с endian-ness, проблемой 'sizeof int' и проблемой CHAR_BIT'). –

ответ

-1

Нет, это не будет возвращать сумму, он будет копировать значения ASCII из 2 символов URL к ключу, если размер ИНТ 2, в противном случае он будет копировать значения ASCII из 4-х символов URL.

+0

Так это просто скопирует значение ASCII «http»? – tims

1

Нет. Я просто скопирую байты из url в ключ. Достаточно заполнить его.
Теперь первые sizeof(int) байтов url могут быть переинтерпретированы как целое число.

Похоже, что это очень простой способ создания числовых клавиш из строк.

+0

Пока вы не возражаете, чтобы все ключи были одинаковыми (для типичных веб-адресов). –

+0

@MichaelGeary - Если ваша цель состоит в том, чтобы разделить URL-адреса на числовые значения, которые представляют используемый протокол, я не понимаю, почему вы не возражаете :) – StoryTeller

+1

Теперь это звучит очень полезно. И, конечно, 'http' и' https' считаются одним протоколом. ;-) –