• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で質問です。)

C言語での悩み:データの書き込みに関して

このQ&Aのポイント
  • C言語でのデータの書き込みに関する質問です。特に、与えられたソースコードの理解が難しいです。詳細な解説と解決策を教えてください。
  • 与えられたC言語のソースコードについての質問です。データの書き込みに関して理解できない部分があり、解決方法を教えてください。
  • C言語のデータ書き込みに関する質問です。特に、与えられたコードの意味や処理の流れについて理解できません。詳しい解説がほしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>まぁ、コピーした後(呼び出し側で)uint32_tとして扱っているのであれば、たぶん問題ないでしょう。 いやいや、adress変化していないんだから問題ありでした。 >あとwhileループの中でadressはインクリメントされていないので >同じアドレス(adress)にdataが書き込まれ続けるという理解でよろしいでしょうか? の理解通りです。 >(data +=2 のとこでどういう処理がされてるのかよく分かっていません。) dataに渡された値が+2されてdataに格納されます。 つまり通常の加算です。 # dataはポインタではありませんので+2が(sizeof(uint32_t) * 2)にはなりません。

aru333333
質問者

お礼

回答ありがとうございます。返信遅くなり申し訳ありません。 >>dataに渡された値が+2されてdataに格納されます。 >>つまり通常の加算です。 No2の回答を頂いた後、自分も気づきました。 0x10000000番地のdataを2バイト分addressに書いたあと +2、つまり0x10000002番地のデータ(dataの残り2バイト) を書いてるってことですね。 組み込み系ではこういうことをよくやるみたいですね。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

[技術者向] コンピューター > プログラミング > C・C++ にC/C++カテゴリがあります。 なんか…むちゃくちゃですねぇ……。 adressはアドレスではないのですが…キャストで無理矢理アドレスにしているようです。 # で、adressの値は変化していませんので書き込み先のアドレスは変化しません。 dataもアドレス扱い…なんですかねぇ。 >adressにはdataの先頭から2バイト分が書き込まれ Endianの影響を受け…ますかね。 まぁ、コピーした後(呼び出し側で)uint32_tとして扱っているのであれば、たぶん問題ないでしょう。 あと……このままだとビルド時にエラーになります。 戻り値返していないですよね? # で、なんで戻り値はuint8_tなんだろうか……。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

C言語の教科書のポインタのインクリメントを勉強しなおしてください。32ビット(4バイト)のデータを指しているポインタをインクリメントすれば何バイト進むか書いてあるはずです。もし書いていないようならその教科書は捨てて別の教科書を買った方がいいでしょう。 多分32ビットのデータが3つ以上並んでいて0番目と2番目が対象になっているのではないでしょうか? 書き込み先は同じところです。 書くデータは32ビットのポインタで示されていて、16ビットのポインタでキャストしています。このような場合、32ビットの内の上位16ビットが書かれるのか下位16ビットが書かれるのかはCPUのエンディアンの設定で変わってきます。

aru333333
質問者

お礼

回答ありがとうございます。返信遅くなり申し訳ありません。 エンディアンが重要なんですね。

関連するQ&A