sscanf будет линеаризовать массив символов в вектор перед попыткой преобразования.
Вам нужно добавить несколько пробелов, в противном случае он просто попытается преобразовать большое значение. Кроме того, массив char следует транспонировать, поскольку Matlab хранит массивы в главном порядке столбцов. В вашем примере, что sscanf на самом деле пытается преобразовать, это строка FFFEFDEFDEFD
, которая переполняется до максимального значения, представленного uint16 (0xFFFF), которое само является целочисленным представлением со знаком -1.
Попробуйте:
colx2 = [colx' ; repmat(' ',1,size(colx,1))]
conversion = typecast(uint16(sscanf(colx2, '%x')), 'int16')
Результат:
conversion =
-274
-1
-547