Если вы делаете это, чтобы узнать, как это сделать, игнорируйте этот пост. Если вы используете эту функцию, потому что вам нужно преобразовать строку шестнадцатеричных чисел в int
, вы должны прогуляться по вашей стандартной библиотеке. Стандартная функция strtol()
преобразует строку в long
, которая может быть приведена к int
(или unsigned int
, пока она была у нее). Третий аргумент - это база, которую нужно преобразовать - в этом случае вам нужно, чтобы база 16 была шестнадцатеричной. Также, если задано основание 0, оно будет считать hex, если строка начинается с 0x
, восьмеричное, если оно начинается с 0
, и десятичное в противном случае. Это очень полезная функция.
РЕДАКТИРОВАТЬ: Только что заметил, но, хотя мы здесь, стоит упомянуть, что вы вообще не должны использовать int
для индексации массивов. Стандарт C определяет тип, называемый size_t
, который предназначен для хранения индексов массива. Обычно это unsigned int
или unsigned long
или что-то в этом роде, но он гарантированно будет достаточно большим для хранения любого массива или смещения указателя, которые вы можете использовать.
Проблема с использованием только int
заключается в том, что теоретически, может быть, когда-нибудь кто-то может передать строку длиннее INT_MAX
, и тогда ваш int
переполнится, возможно, обернется и начнет читать его из памяти вероятно, не следует, потому что он использует отрицательный индекс. Это маловероятно, особенно для такой функции, потому что возвращаемое вами значение int
будет переполнено задолго до переполнения вашего счетчика int
, но - это важная вещь, о которой следует помнить.
Чтобы быть технически верным, вы должны использовать только переменные типа size_t
для индексирования массивов или, по крайней мере, использовать только unsigned
типы, если вы действительно не хотите пытаться получить доступ к отрицательным элементам (что обычно плохая идея, если вы знаю, что ты делаешь). Тем не менее, это не большая проблема здесь.