ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

typecast

元データを変更せずにデータ型を変換

構文

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 と uint8typecast に入力すると、2 つの 8 ビット セグメント (3 と 232) に非スパースの 16 ビットを返し、元の値 (3*256 + 232 = 1000) を保持します。一方、関数 cast は、入力値を 255 に切り捨てます。

関数 typecast の出力は、使用するシステムにより、異なった形式になります。最上位のバイト (big-endian と呼ばれる順序) からデータを保持するコンピューター システムもあれば、最下位のバイト (little-endian) からデータを保持するものもあります。

    メモ:   X の値が出力値の作成に必要な値より少ない場合、MATLAB はエラーを発行します。

例 1

同じサイズのデータ型間で変換します。

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

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

例 2

X を 32 ビットの整数のベクトルに設定し、8 ビット整数タイプに変換します。

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

これを little-endian のシステムで実行すると、以下の結果を出力します。各 32 ビット値は、4 つの 8 ビット セグメントへ分割されます。

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

X の 3 番目の要素 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) へ変換します。16 進数の形式で数値を表示し、どのようにデータが再配置されたかを見易くします。

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

まず、関数 typecast を big-endian システムで処理します。入力データの 4 つの 8 ビット セグメントは、2 つの 16 ビット セグメントを作成するために結合されます。

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

次に little-endian システムで処理を行います。バイト順序の違いに注意してください。

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

関数 swapbytes で little-endian の出力を big-endian の形式に (逆も同様に) します。

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

例 4

3 つの 8 ビット値のベクトルから 32 ビット値を作成します。入力に十分なバイト数がないため、MATLAB はエラーを発行します。

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

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

4 つの 8 ビット値のベクトルで例をやり直すと、適切に値が返されます。

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

参考

| |

この情報は役に立ちましたか?