int のメモリ値を char バッファにコピーしようとしています。コードは次のようになります。
#define CPYINT(a, b) memcpy(a, &b, 4)
............
char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);
...........
str1 を印刷すると空白になります。どうか明らかにしてください。
整数のバイト表現を char 配列にコピーしています。次に、printf
この配列をヌル終端文字列として解釈するように要求します。str1[0]
ゼロの場合、基本的に空の文字列を出力しています (ここではエンディアンの話はスキップします)。
何を期待していましたか?明らかに、整数のテキスト表現を出力したい場合はi
、 を使用する必要がありますprintf("%d", i)
。
試す
printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);
代わりは。
整数 1 のバイナリ表現には、おそらく先頭の NUL が含まれているため、現在の printf ステートメントは必要以上に早く終了します。
ここであなたの意図は何ですか?現在、任意のバイト値を char 配列に入れていますが、それらを文字列として解釈しています。最初のバイトはおそらくゼロ (null) であるため、何も出力されませんが、おそらく文字の多くは印刷できないため、コピーが機能したかどうかを確認するために printf を使用するのは不適切なツールです。
したがって、配列をループして各バイトの数値を出力します。そのために %0xd が役立つ場合があります。または、意図が実際に int の文字列表現を作成することである場合は、より大きなバッファーとそのためのスペースが必要になります。 null ターミネータ。
tou が itoa 関数 のリンク テキストを使用できるように、intger を char* に変換する必要があるかもしれません