メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

typecast

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

説明

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

Y = typecast(X,"like",p) は、X のビット パターンをプロトタイプ p と同じデータ型および実数/複素数に変換します。 (R2024b 以降)

すべて折りたたむ

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

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

R2024b 以降

倍精度で 1 行 4 列の実数のベクトルを作成します。

X = [1.2 2 3.4 4]
X = 1×4

    1.2000    2.0000    3.4000    4.0000

倍精度で複素数を作成します。

p = 1i
p = 
0.0000 + 1.0000i

X を、変数 p と同じデータ型および実数/複素数に変換します。結果は、倍精度の 2 つの複素数のベクトルになります。

Y = typecast(X,"like",p)
Y = 1×2 complex

   1.2000 + 2.0000i   3.4000 + 4.0000i

Y を、X と同じデータ型および実数/複素数に戻します。結果は、X の元の 4 つの数値のベクトルになります。

X2 = typecast(Y,"like",X)
X2 = 1×4

    1.2000    2.0000    3.4000    4.0000

入力引数

すべて折りたたむ

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

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical (R2024b 以降) | char (R2024b 以降)
複素数のサポート: あり

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

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

プロトタイプ。スカラーまたはベクトルとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
複素数のサポート: あり

ヒント

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

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

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する

参考

| |