преобразование типа

Преобразуйте типы данных, не изменяя базовые данные

Синтаксис

Y = typecast(X, type)

Описание

Y = typecast(X, type) преобразовывает числовое значение в X к типу данных, заданному type. Вход X должен быть полным, некомплексным, числовым скаляром или вектором. Вход type является набором строки к одному из следующего: 'uint8', 'int8', 'uint16', 'int16', 'uint32', 'int32', 'uint64', 'int64', 'single' или 'double'.

typecast отличается от функции MATLAB® cast в этом, это не изменяет входные данные. typecast всегда возвращает то же количество байтов в выводе Y, как были во входе X. Например, кастинг 16-битного целого числа 1000 к uint8 с typecast возвращает полные 16 битов в двух 8-битных сегментах (3 и 232) таким образом хранение его исходного значения (3*256 + 232 = 1000). Функция cast, с другой стороны, обрезает входное значение до 255.

Вывод typecast может быть отформатирован по-другому, в зависимости от какой системы вы используете его на. Некоторые компьютерные системы хранят данные начиная с его старшего значащего байта (упорядоченное расположение вызвало обратный порядок байтов), в то время как другие запускают с младшего значащего байта (названный прямым порядком байтов).

Примечание

MATLAB выдает ошибку, если X содержит меньше значений, чем необходимо, чтобы сделать выходное значение.

Примеры

Пример 1

Этот пример преобразовывает между типами данных, одного размера:

typecast(uint8(255), 'int8')
ans =
   -1

typecast(int16(-1), 'uint16')
ans =
  65535

Пример 2

Установите X на 1 3 вектор 32-битных целых чисел, затем бросьте его к 8-битному целочисленному типу:

X = uint32([1 255 256])
X =
           1         255         256

Выполнение этого в системе с прямым порядком байтов приводит к следующим результатам. Каждое 32-битное значение разделено в четыре 8-битных сегмента:

Y = typecast(X, 'uint8')
Y =
   1   0   0   0  255   0   0   0   0   1   0   0

Третий элемент X, 256, превышает 8 битов, что это преобразовывается в в Y (9) и таким образом переполняется к Y (10):

Y(9:12)
ans =
    0    1    0    0

Обратите внимание на то, что length(Y) равен 4.*length(X). Также отметьте различие между выводом typecast по сравнению с тем из cast:

Z = cast(X, 'uint8')
Z =
    1  255  255

Пример 3

Этот пример бросает меньший тип данных (uint8) в больший один (uint16). Отображение чисел в шестнадцатеричном формате облегчает видеть, как данные перестраиваются:

format hex
X = uint8([44 55 66 77])
X =
   2c   37   42   4d

Первый typecast сделан в системе с обратным порядком байтов. Четыре 8-битных сегмента входных данных объединены, чтобы произвести два 16-битных сегмента:

Y = typecast(X, 'uint16')
Y =
   2c37   424d

Второе сделано в системе с прямым порядком байтов. Отметьте различие в порядке байтов:

Y = typecast(X, 'uint16')
Y =
   372c   4d42

Можно отформатировать вывод с прямым порядком байтов в обратный порядок байтов (и наоборот) использование функции swapbytes:

Y = swapbytes(typecast(X, 'uint16'))
Y =
   2c37   424d

Пример 4

Этот пример пытается сделать 32-битное значение из вектора трех 8-битных значений. MATLAB выдает ошибку, потому что существует недостаточное количество байтов во входе:

format hex
typecast(uint8([120 86 52]), 'uint32')

Error using typecast
Too few input values to make output type.

Повторите пример, но с вектором четырех 8-битных значений, и он дает ожидаемый ответ:

typecast(uint8([120 86 52 18]), 'uint32')
ans =
   12345678

Расширенные возможности

Смотрите также

| |

Представлено до R2006a