Я пытался понять эту функцию. Будет ли следующая функция возвращать сумму значений ASCII символов в строке url?memcpy для строки до int
int map(char* url) {
int key;
memcpy(key, url, sizeof(int));
return key;
}
Я пытался понять эту функцию. Будет ли следующая функция возвращать сумму значений ASCII символов в строке url?memcpy для строки до int
int map(char* url) {
int key;
memcpy(key, url, sizeof(int));
return key;
}
Нет, это не будет возвращать сумму, он будет копировать значения ASCII из 2 символов URL к ключу, если размер ИНТ 2, в противном случае он будет копировать значения ASCII из 4-х символов URL.
Так это просто скопирует значение ASCII «http»? – tims
Нет. Я просто скопирую байты из url
в ключ. Достаточно заполнить его.
Теперь первые sizeof(int)
байтов url
могут быть переинтерпретированы как целое число.
Похоже, что это очень простой способ создания числовых клавиш из строк.
Пока вы не возражаете, чтобы все ключи были одинаковыми (для типичных веб-адресов). –
@MichaelGeary - Если ваша цель состоит в том, чтобы разделить URL-адреса на числовые значения, которые представляют используемый протокол, я не понимаю, почему вы не возражаете :) – StoryTeller
Теперь это звучит очень полезно. И, конечно, 'http' и' https' считаются одним протоколом. ;-) –
Что вы пытаетесь достичь? Увеличение букв и/или цифр? Вы можете сделать это с помощью операторов типа 'char c = 'A'; C++ 'и симпатии ... помните: как только вы увеличиваете прошлое 0x126, вы снова начинаете с 0x0 * (NUL) * - и есть немало непечатаемых символов, пока вы не доберетесь до печатных ... – specializt
Can вы объясните, что вы хотите, чтобы функция выполняла? – 599644
Нет, он вернет первый символ раз 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'). –