short int[]をchar*に変換するにはどうすればよいですか?
short int test[4000];
char* test2;
私はこれを試しました:
test2 = (char*)test[4000]
エラー->PTRが無効です
short int[]をchar*に変換するにはどうすればよいですか?
short int test[4000];
char* test2;
私はこれを試しました:
test2 = (char*)test[4000]
エラー->PTRが無効です
このような:
test2 = (char*)test;
test[4000]
配列自体ではなく、 arrayの 4001 番目の項目を意味します。test
ただし、一般的には、これは良い考えではありません。少なくとも、ビッグ エンディアン システムとリトルエンディアン システムの間でプログラムを移植することはできません。それでも、たとえば特定のマイクロコントローラー用にコーディングしている場合は問題ありません。
あなたがしていることはおそらく悪い考えですが...
test2 = (char*) test;
配列形式のバッファがあり、そのバイナリ コンテンツをファイルに書き込みたいとします。次のようにします。
if (fwrite(test, sizeof(test), 1, f) < 1)
{
// handle error here (write failed)
}
fwrite()
関数は、バイナリ データをファイルに書き込む (およびfread()
読み取る) ために使用されます。ポインターを取るvoid*
ため、任意の型で動作します (また、C++ は暗黙的に他のポインター/配列をそれに変換します)。
は、配列の正確なサイズをsizeof(test)
決定します。全体を書きたくない場合 (つまり、その一部だけを塗りつぶしたい場合) を使用します。ここで、Nは塗りつぶされた要素の数です。sizeof(short) * N
1
ここでは、書き込むデータのブロックが 1 つあることを意味します。そのためfwrite()
、データ全体を一度に書き込みます。f
書き込み先のファイルです。そして、書き込まれたブロックの数を返します (1
成功時と0
失敗時など)。
完全を期すために、これは を使用するアプローチの 1 つにすぎないことに注意してくださいfwrite()
。次のようなものを使用すると、もう少しセマンティックになる可能性があります。
fwrite(test, sizeof(short), N, f)
ただし、fwrite()
実際にはデータの一部のみを書き込む可能性があり、それについて注意する必要があります。つまり、返された値がN未満の場合、残りの部分の書き込みを再試行する必要があります。