こんばんは。
以下のように、データ列を逆順にして、文字コードを引くことで
簡単な暗号化の処理をしている関数があるのですが
ソースここから------>
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' に変換しました。データが失われているかもしれません。
という警告がでてしまいます。
動作にみたところ、支障はないのですが、気味が悪いので解消したいと思います。ソースの不具合(つっこみどころが多数あるかもしれませんが。。)を
ご指摘頂ければ幸いです。
どうぞよろしくお願いいたします。
*( 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でも調べてみてください。
isshiさん
有難うございました。解決しました。
MSDNを読んで、理解もできました。有難うございました。
ツイート | ![]() |