プログラムについて(UNIX)
以下のプログラムを部分的で結構ですので
解説していただけないでしょうか?
打ち込んだ数字を10進法に変換して、
その後どうなっているのかがよく分かりません。
よろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define N 127
#define M 121
#define LENGTH 45539
int C[N] ;
int d[LENGTH/N];
int b[LENGTH/N];
float r[LENGTH];
char message[LENGTH/N/7];
int PNread(int);
int PXread(void);
int main()
{
int i, m;
/* Insert the process to input the user No. m here. */
printf("Input the user No. : "); scanf("%d", &m);
if (m < 0 || m > M)
{
printf("You input a wrong user No.\n");
exit(-1);
}
printf("\nThe user No. m is %d. \n", m);
/* Read the spread code for user No. m from data file */
if(PNread(m) == -1)
exit(-1);
/* Display the spread code. */
/* Here is an example to display the first 10 numbers */
if(PXread()== -1)
exit(-1);
int t,k;
float hatD[LENGTH/N];
for(t=0; t < LENGTH/N; t++){
hatD[t]=0;
for(k = t*N; k < (t+1)*N; k++)
hatD[t]+= ((float)r[k]*C[k%N])/((float)N);
d[t] = (hatD[t] >= 0)?1:-1; /*?はif文の省略形である*/
}
for(t = 0; t < LENGTH/N; t++)
b[t] = (d[t] >= 0) ? 0 : 1;
/* 文字に変換する */
for(i = 0; i < LENGTH/N; i += 7)
message[i/7] = b[i]*64 + b[i+1]*32 + b[i+2]*16 + b[i+3]*8 + b[i+4]*4 + b[i+5]*2
+ b[i+6];
/* メッセージの表示 */
printf("Message:\n%s\n", message);
return 0;
}
/* Function of spread code reading */
int PNread(int m)
{
FILE *in;
/* Verify the data file */
if ((in = fopen("PN7.dat", "r"))== NULL)
{
/* Error message */
printf("Error: Cannot find the data file. \n");
return -1;
}
if(m>1)
/* Set the file pointer to the m-th user's spread code */
fseek(in,(m-1)*N*sizeof(int),SEEK_SET);
/* Read the spread code to array C */
fread(C,sizeof(int),N,in);
fclose(in);
return 1;
}
int PXread(void)
{
FILE *in;
int count; float rtemp;
if((in = fopen("Rx7_51.dat", "r"))== NULL)
{
printf("Error; Cannot find the date file. \n");
return -1;
}
for(count = 0; count < LENGTH; count++){
fscanf(in, "%f", &rtemp);
r[count] = rtemp;
}
fclose(in);
return 1;
}
お礼
結局1バイトずつ書き出しているから、 日本語にならなかったんですね。 2バイトやスペースの判定など、 よろしかったら教えてください。
補足
ちなみに、2バイト文字でもこの方法で 可能でしょうか?