他の人から頂いたソースコードを解析しようとしている者です。元々組み込み用の開発環境で作成されたコードなのですが、同じ開発環境が準備できないためVisualStudio2010で構築しなおしたところ、下記のソースコードで下記エラーが発生します。
valはdouble型、dataはunsigned char型です。
valをint型にするとエラーは出なくなります。
C
1*(((unsigned char *)st1->val) + 0) = st2->data[cnt]; cnt++; 2*(((unsigned char *)st1->val) + 1) = st2->data[cnt]; cnt++; 3*(((unsigned char *)st1->val) + 2) = st2->data[cnt]; cnt++; 4*(((unsigned char *)st1->val) + 3) = st2->data[cnt]; cnt++; 5*(((unsigned char *)st1->val) + 4) = st2->data[cnt]; cnt++; 6*(((unsigned char *)st1->val) + 5) = st2->data[cnt]; cnt++; 7*(((unsigned char *)st1->val) + 6) = st2->data[cnt]; cnt++; 8*(((unsigned char *)st1->val) + 7) = st2->data[cnt]; cnt++;
C
1エラー 3 error C2440: '型キャスト' : 'double' から 'unsigned char *' に変換できません。
・このエラーが出る理由
・valをint型にするとエラーが出なくなる理由
・(もし可能なら)valをdouble型にしたままエラーを出さなくする方法
を教えていただけないでしょうか。
コードがやろうとしていることは、st2->dataにはdoubleの8byteデータが入っており、それをst1->valの先頭アドレスから8バイト分コピーしているものと想像します。st1->valの先頭アドレスを得るのが目的だと思ったので、試しにキャストのところを「(double char *)st1->val)」としましたが、上記同様のエラー('double *' に変換できません)が出ました。
以下、追記です。
・st1の型は下記です。(val以外の変数名は適当に変換しました)
C
1typedef struct { 2 unsigned char a; 3 unsigned short b; 4 unsigned char c; 5 unsigned int d; 6 unsigned short e; 7 unsigned int f; 8 double val; 9 double g; 10} GET_DETECTED_STAR_INFO_COMMAND_STRUCT; 11 12GET_DETECTED_STAR_INFO_COMMAND_STRUCT *st1
回答4件
あなたの回答
tips
プレビュー