Main Content

typecast

基となるデータを変更せずにデータ型を変換

説明

Y = typecast(X,type) は、X のビット パターンを、基となるデータを変更せずに type で指定されるデータ型に変換します。X は非スパースかつ非複素数の数値スカラーまたは数値ベクトルでなければなりません。

すべて折りたたむ

整数を同じストレージ サイズの符号なし整数に変換します。

X = int16(-1)
X = int16
    -1
Y = typecast(X,'uint16')
Y = uint16
    65535

ビット パターンを 16 進数表現で表示します。typecast を使用してデータ型を変更しても、基となるデータは変更されません。

format hex
X
X = int16
   ffff

Y = typecast(X,'uint16')
Y = uint16
   ffff

8 ビット整数の 1 行 4 列のベクトルを作成します。

X = int8([77 60 43 26])
X = 1x4 int8 row vector

   77   60   43   26

4 バイト (32 ビット) のストレージを使用する 4 つの 8 ビット整数を、同じ 4 バイトのストレージを使用する単精度数に変換します。

Y = typecast(X,'single')
Y = single
    3.5411e-23

ビット パターンを 16 進数表現で表示します。16 進数表記で、1 バイト (8 ビット) は 2 桁で表されます。関数 typecast は、データを変更せずにビット パターンを再配列します。

format hex
X
X = 1x4 int8 row vector

   4d   3c   2b   1a

Y = typecast(X,'single')
Y = single
   1a2b3c4d

32 ビット符号なし整数の 1 行 3 列のベクトルを作成します。

X = uint32([1 255 256])
X = 1x3 uint32 row vector

     1   255   256

typecast を使用して、X を 8 ビット符号なし整数にキャストします。各 32 ビット値は、4 つの 8 ビット セグメントに分割されます。このコードをリトル エンディアンのシステムで実行すると、以下の結果が出力されます。

Y = typecast(X,'uint8')
Y = 1x12 uint8 row vector

     1     0     0     0   255     0     0     0     0     1     0     0

X の 3 番目の要素である 256 は、8 ビットで格納可能な最大値を超えています。そのため、Y(9) の変換した値が Y(10) にオーバーフローします。

Y(9:12)
ans = 1x4 uint8 row vector

   0   1   0   0

基となるデータを変更せずに、Y を 32 ビット符号なし整数に変換して戻すことができます。

X2 = typecast(Y,'uint32')
X2 = 1x3 uint32 row vector

     1   255   256

typecast の出力と cast の出力を比較して、2 つの関数の違いを確認します。

Z = cast(X,'uint8')
Z = 1x3 uint8 row vector

     1   255   255

X2 = cast(Z,'uint32')
X2 = 1x3 uint32 row vector

     1   255   255

小さなデータ型 (uint8) から大きなデータ型 (uint16) に整数をキャストします。16 進数表現を使用して、ビット パターンの再配列を表示します。関数 typecast は、出力をリトル エンディアン形式で返し、入力データの 4 つの 8 ビット セグメントを結合して 2 つの 16 ビット セグメントを生成します。

format hex
X = uint8([44 55 66 77])
X = 1x4 uint8 row vector

   2c   37   42   4d

Y = typecast(X,'uint16')
Y = 1x2 uint16 row vector

   372c   4d42

関数 swapbytes を使用して、リトル エンディアン出力をビッグ エンディアン出力に変換できます (逆も可能)。

Y = swapbytes(typecast(X,'uint16'))
Y = 1x2 uint16 row vector

   2c37   424d

入力引数

すべて折りたたむ

入力配列。スカラーまたはベクトルとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

新しいデータ型。'single''double''int8''int16''int32''int64''uint8''uint16''uint32' または 'uint64' として指定します。

type のビット サイズが X の各要素のビット サイズの n 倍の大きさである場合、X をデータ型 type に変換するには、X に含まれる要素数が n の倍数でなければなりません。そうでない場合、MATLAB® はエラーをスローします。

ヒント

  • 関数 typecast は、MATLAB 関数 cast とは異なり、入力データを変更しません。関数 typecast は常に、入力 X と同じバイト数を出力 Y に返します。たとえば、typecast を使用して 16 ビット整数 1000 を uint8 にキャストすると、16 ビット全体を 2 つの 8 ビット セグメントに を返し (3 と 232)、元の値 (3*256 + 232 = 1000) を保持します。一方、関数 cast は、入力値を 255 に切り捨てます。

  • typecast の出力形式は、ご使用のシステムによって異なる場合があります。最下位バイトからデータを格納する ("リトル エンディアン" と呼ばれる順序) コンピューター システムも、最上位バイトからデータを格納する ("ビッグ エンディアン" と呼ばれる順序) コンピューター システムもあります。関数 swapbytes を使用して、バイト順をリトル エンディアンからビッグ エンディアン (またはその逆) に反転できます。

拡張機能

バージョン履歴

R2006a より前に導入

参考

| |