警告:データが失われているかもしれませんを解消するには?

解決


たいち  2004-07-22 06:01:40  No: 54061

こんばんは。 

以下のように、データ列を逆順にして、文字コードを引くことで
簡単な暗号化の処理をしている関数があるのですが

ソースここから------>
void mChange(BYTE* in) {

 char eep_un[CST_EEP_BYTE]= {'\0'};
 int i;

 for ( i=0; i < CST_EEP_BYTE; i++ )
  eep_un[i] = *( in + ( CST_EEP_BYTE - 1) - i) - DEF_CODE_VAL;  
  memcpy(in, eep_un, CST_EEP_BYTE);  // 復号結果を戻す
}
<------ ここまで

そうすると、
eep_un[i] = *( in + ( CST_EEP_BYTE - 1) - i) - DEF_CODE_VAL;
のところで、
warning C4244: '=' : 'int' から 'char' に変換しました。データが失われているかもしれません。
という警告がでてしまいます。

動作にみたところ、支障はないのですが、気味が悪いので解消したいと思います。ソースの不具合(つっこみどころが多数あるかもしれませんが。。)を
ご指摘頂ければ幸いです。

どうぞよろしくお願いいたします。


isshi  2004-07-22 08:59:18  No: 54062

*( in + ( CST_EEP_BYTE - 1) - i) - DEF_CODE_VAL
の計算結果が必ず char 型の範囲(-128〜127)に収まることが分かっている場合や、
char 型に切り下げられても問題ないことが分かっている場合は無視してかまいません。
警告がうっとうしい場合は、コンパイラの警告レベルを下げるか、
eep_un[i] = (char)(*( in + ( CST_EEP_BYTE - 1) - i) - DEF_CODE_VAL);
のようにキャストすればよいと思います。

"C4244"をキーワードにMSDNでも調べてみてください。


たいち  2004-07-22 18:28:34  No: 54063

isshiさん

有難うございました。解決しました。
MSDNを読んで、理解もできました。有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加