1

short int[]をchar*に変換するにはどうすればよいですか?

short int test[4000];
char* test2;

私はこれを試しました:

test2 = (char*)test[4000]

エラー->PTRが無効です

4

3 に答える 3

4

このような:

test2 = (char*)test;

test[4000]配列自体ではなく、 arrayの 4001 番目の項目を意味しますtest

ただし、一般的には、これは良い考えではありません。少なくとも、ビッグ エンディアン システムとリトルエンディアン システムの間でプログラムを移植することはできません。それでも、たとえば特定のマイクロコントローラー用にコーディングしている場合は問題ありません。

于 2012-08-26T21:57:07.017 に答える
2

あなたがしていることはおそらく悪い考えですが...

test2 = (char*) test;
于 2012-08-26T21:57:05.787 に答える
0

配列形式のバッファがあり、そのバイナリ コンテンツをファイルに書き込みたいとします。次のようにします。

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未満の場合、残りの部分の書き込みを再試行する必要があります。

于 2012-08-26T22:23:13.443 に答える