unsigned char cTest = argv[1];
неверно, потому что argv[1]
имеет тип char *
. Если argv[1]
содержит что-то вроде "0xff"
и вы хотите присвоить целочисленное значение, соответствующее этому значению, unsigned char
, то, вероятно, проще всего было бы использовать strtoul()
, чтобы сначала преобразовать его в unsigned long
, а затем проверьте, является ли преобразованное значение меньше или равным UCHAR_MAX
. Если да, вы можете просто присвоить cTest
.
Третий параметр
strtoul()
является основанием, которое может быть 0 для обозначения разбора числа в стиле C (допускаются восьмеричные и шестнадцатеричные литералы). Если вы хотите разрешить только основание 16, передайте это в качестве третьего аргумента strtoul()
. Если вы хотите разрешить любую базу (чтобы вы могли анализировать 0xff
, 0377
, 255
и т. Д.), Используйте 0.
UCHAR_MAX
определено в <limits.h>
.