1

私はこのスレッドを読んでいますintをchar配列に格納しますか?

そして、intをcharの配列に格納する必要があります。

それで、前のスレッドを読んで、自分のデモを作成しようとしました。しかし、それは機能しておらず、なぜ長い間そうしないのかを理解しようとしています。手がかりやアイデアを教えていただけませんか?

#include <stdio.h>

int main(void) {

    char buffer[4];
    int y = 2200;
    buffer[0] = (y >> 0) & 0xff;
    buffer[1] = (y >> 8) & 0xff;
    buffer[2] = (y >> 16) & 0xff;
    buffer[3] = (y >> 24) & 0xff;

    int x = buffer[0];

    printf("%i = %i\n", y, x);
}

出力

gcc tmp.c && ./a.out
2200 = -104
4

2 に答える 2

6
int x = buffer[0];

暗黙的にintに変換されたcharatの値を。にコピーします。で始まる最初のバイトを、必要なものとして解釈しません(この動作が一般的なシナリオ、つまり.Oops!で微妙に壊れる邪悪な方法を考えてください)。 buffer[0]xsizeof intbufferintchar c = 10; int x = c

buffer[n]メモリアドレスを返さないことを認識してください。それは。を返しますcharsizeof int要素を1つの全体として解釈するには、最初intにキャストbufferするだけです。int*

int x = *((int*)buffer);

そしてオフセットの場合( sではなくsでn測定):intchar

int x = *((int*)buffer + n);

また、コードはを想定していることに注意してくださいsizeof int == 4。これは保証されていません。

于 2012-10-22T23:51:24.953 に答える
0

x = buffer[0]あなたが望むことをしません。試してみてくださいmemcpy(&x,buffer,sizeof(x))。(追加する必要があります#include <string.h>。)

于 2012-10-22T23:49:10.913 に答える