Примените MATLAB sscanf для преобразования из hex в dec для нескольких элементов в векторе столбца - PullRequest
0 голосов
/ 29 октября 2018

В MATLAB я пытаюсь преобразовать шестнадцатеричное число (дополнение 2) в десятичное для вектора столбца, используя функцию sscanf. Хотя я успешно выполнил преобразование с использованием функции hex2dec, я не смог преобразовать несколько элементов (шестнадцатеричные значения) в вектор-столбец с sscanf. Тем не менее, когда у меня есть только один элемент (шестнадцатеричное значение) в векторе столбца, преобразование шестнадцатеричного значения в десятичное успешно. Как преобразовать вектор столбца с несколькими элементами (шестнадцатеричными значениями), используя функцию sscanf, в шестнадцатеричное, дополнение 2?

colx = ['FEEE'; 'FFFF'; 'FDDD']
conversion = typecast(uint16(sscanf(colx, '%x')), 'int16')

Мой вывод:

  conversion = -1

Однако вывод должен быть:

conversion = -274
             -1
             -547

1 Ответ

0 голосов
/ 29 октября 2018

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
...