わかる事は、「2バイト文字と1バイト文字を区別して暗号化するプログラム」「シフトJISの2バイトコードが関係している」という事くらいです。
(知識が乏しく、質問の仕方も悪いとは思いますがよろしくお願いします。)
質問は
①while文の上の「i=0;」は何のためにあるか?
②while文の中の下記の部分の働きは何?
bun=c*256+c1+k; →何故cに256を掛けるのか?
angou=bun/256; →256で割る意味は?
angou[i+1]=bun%256; →何故bunを%256で割った余りを求めるのか?
i++;
i++; →何故i++が二つある?
③その下のelse内の「angou=c+(k%256);」は何を意味しているのか?
④「len=i;」は何故あるか?
⑤「angou[len]=0;」は何故あるか?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
FILE *fp,*ff;
int k,i,len,c,c1;
unsigned short int bun;
unsigned char fname[80];
char angou[10000];
printf("鍵の値入力:");
scanf("%d",&k);
getchar();
printf("鍵=%d\n",k);
printf("ファイル名 : ");
gets(fname);
fp = fopen(fname, "r");
if(fp == NULL){
printf("ファイルが開きません\n");
exit(1);
}
i=0;
while ((c = fgetc(fp)) != EOF){
if (c >= 0x81 && c <= 0x9F) {
if ((c1 = fgetc(fp)) == EOF)break;
bun=c*256+c1+k;
angou[i]=bun/256;
angou[i+1]=bun%256;
i++;
i++;
}
else {
angou[i]=c+(k%256);
i++;
}
}
len=i;
printf("%d\n",len);
if ((ff = fopen("Filex.txt", "w")) == NULL) {
printf ("Can't Open C Source File!\n" );
exit (2);
}
angou[len]=0;
fwrite(angou,len,1,ff);
printf("%d\n",i);
fclose(fp);
return (0);
}