Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

typecast

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

説明

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

すべて折りたたむ

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

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

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

formathexX
X =int16ffff
Y = typecast(X,'uint16')
Y =uint16ffff

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

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

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

Y = typecast(X,'single')
Y =single3.5411e-23

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

formathexX
X =1x4 int8 row vector4d 3c 2b 1a
Y = typecast(X,'single')
Y =single1a2b3c4d

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

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

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

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

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

Y(9:12)
ans =1 x4 uint8行向量0 1 0 0

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

X2 = typecast(Y,“uint32”)
X2 =1x3 uint32 row vector1 255 256

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

Z = cast(X,'uint8')
Z =1x3 uint8 row vector1 255 255
X2 = cast(Z,“uint32”)
X2 =1x3 uint32 row vector1 255 255

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

formathexX = uint8([44 55 66 77])
X =1 x4 uint8行向量2c 37 42 4d
Y = typecast(X,'uint16')
Y =1x2 uint16 row vector372c 4d42

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

Y = swapbytes(typecast(X,'uint16'))
Y =1x2 uint16 row vector2c37 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 より前に導入