Я предполагаю, что ваш char* name
содержит строку представление короткого замыкания, которое вы хотите, т.е. "15"
.
Do not приведение char*
непосредственно к типу без указателя. Приведения в C на самом деле вообще не изменяют данные (за некоторыми исключениями) - они просто сообщают компилятору, что вы хотите преобразовать один тип в другой. Если вы преобразуете char*
в unsigned short
, вы будете принимать значение указателя (которое не имеет ничего общего с содержимым), отсекая все, что не вписывается в short
, а затем выбрасывает все остальное. Это абсолютно не то, что вы хотите.
Вместо этого используйте функцию std::strtoul
, которая анализирует строку и возвращает вам эквивалентное число:
unsigned short number = (unsigned short) strtoul(name, NULL, 0);
(Вам все еще нужно использовать приведение, потому что strtoul
возвращает unsigned long
. Однако это приведение происходит между двумя различными целочисленными типами, и поэтому является допустимым. Худшее, что может случиться, это то, что число внутри name
слишком велик, чтобы вписаться в short
- ситуацию, которую вы можете проверить в другом месте.)