質問: argv[cnt] + 2; } break; ``` オプションの解析で オプションがt , T だったら テキストを opts->srecord0_text に格納したいのですが E0137 式は変更可能な左辺値である必要があります bin_change_srecord 上記のエラーが出てしまいます。 解決出来なかったので、アドバイスお願い致します。
回答: main()中 `if ((file = fopen(opts.infilename, "r")) != NULL) { //ファイルがあれば` 他の質問と同様、ここもバイナリファイルは"rb"で開きましょう。 同じくmain()中 `while (fgets(readline, ROWREADMAX, file) != NULL) {` バイナリデータには行の概念がないというか改行コードも普通にデータの一つなので、改行コードを単位としてデータを切り出すfget()では適切な読み出しが出来ません。fread()あたりを使って、oneline_data_length バイトずつデータを読み出すことになるかと思います。。readlineという変数名も不適切ですね。 `analysis_binary_change_srecord(char readline[], FILE* wfile, int loadaddress, int stype, int oneline_data_length) {` 戻り値がないのなら、void を指定しましょう。 analysis_binary_change_srecord()中 `for (int i = 0; i < oneline_data_length; i++) {` バイナリファイルのサイズは必ずoneline_data_lengthで割り切れるのでしょうか。そうでない可能性があるのなら、先述のfread()の戻り値等を使って適切な処理をする必要があると思います。 チェックサムの考え方も計算式も目茶苦茶です。 バイナリS-recordにエンコードするときには元データから計算したチェックサムを付加するだけ。 そのデータが様々な経路を通った後、元のバイナリにデコードする時に再計算したチェックサムと付加しておいたチェックサムとが適切な関係であればデータ化けはなさそうだ、という判断の材料にするものです(チェックサムはあまり強力な検出手段ではありませんが、それは今回は関係ない話)。 つまり、バイナリ->S-recordの変換時にはチェックサムの検査は行いません。 その他、きちんと見ていませんが、書き出されるaddressの値も適切でない気がします。