下記コードのような構造体を作り、ポインタ増やしながら値を代入したいです。
色々試しましたが、うまく行きません。構造体メンバへのアドレス指定方法についてアドバイスをお願いします。
typedef struct { uint32_t a //Address offset: 0x00 uint8_t b //Address offset: 0x04 uint32_t c //Address offset: 0x05 }s_instance; s_instance *instance; void hoge(s_instance *hoge){ hoge offset 0x00番地に値を代入 hoge offset 0x04番地に値を代入 hoge offset 0x05番地に値を代入 }
実際に試したコードも書いていただけますか?
提示された構造体のメンバーへの代入処理を行いたいのですか?
それとも、dllの呼出しなどのため、任意のオフセット位置にメンバーを配置した構造体を作りたいということですか?
あと、uint32_t a と、unit8_t b は、型が逆ではないでしょうか?
ただ、構造体メンバーへ代入したいです。
uint32_t *pp; uint8_t xx = 0x04; pp = &hoge->a + xx; *pp = 100;
こんな感じでエラーでなくなりましたが、これで問題ないですかね?
YT0014>> メンバのデータ型がバラバラになっているデータベースのようなものを作っています。
ですから、逆ではありません。
型ではなく、オフセットが誤っていたんですね、納得しました。
なぜ、ポインタをオフセット演算させる必要があるのでしょうか。
その必要がないなら、構造体全体のポインタからメンバ参照を行うほうが適切かと思います。
そうした書き方だとメンバが多すぎて、switch文が長くなるからです。
ポインタ指定ですと、入ってくるデータにoffset番地属性だけ指定しておけば、アクセスできるからです。
動かなくても良いので、そのswitch文をご提示いただけないでしょうか?
私には、ParaParaDanceさんのやりたいことが理解できておりません。
#typedef struct{
uint8_t a, uint32_t b, uint32_t c ・・・・・・100個。
}hoge_def;
void switch(hoge_def *hoge, uint32_t data){
switch(data){
case 0: hoge->a = 100; break;
case 1: hoge->b = 200; break;
case 2: hoge->c = 300; break; .........100個}
}
ポインタを使わないとcaseを100 個作る必要があります。
これをポインタ参照にし、data xは &hoge->a + 0x??;のようにしたいわけです。
回答5件
あなたの回答
tips
プレビュー