一、说明:
1.R(len,i)宏的含义
设len=8
序列 R值
i=0 8-0-1=7
i=1 8-1-1=6
i=2 8-2-1=5
i=3 8-3-1=4
i=4 8-4-1=3
i=5 8-5-1=2
i=6 8-6-1=1
i=7 8-7-1=0
2.
test1.txt 存放了
测试
两个汉字,如下图所示:
3.
程序编译器编码为UTF-8
二、代码
#include<stdio.h>
#include<string.h>
#define R(len,i) (len-i-1)
#define ONE_BYTE 8
char u1[ONE_BYTE+1]="";
char u2[ONE_BYTE+1];
char u3[ONE_BYTE+1];
char path[256]="";
const char* dir="/storage/emulated/0";
const char* file="C4droid/test1.txt";
int makePath(const char* dir,const char* file);
int readFile(char* filename);
void rprint8bits(char* rstr,char* ostr);
void toBinary8Byte(int _1Decimal,char * _8BitStr);
int main()
{
int n=0;
n=makePath(dir,file);
printf("%d,%s\n",n,path);
printf("------------------------\n");
readFile(path);
printf("------------------------\n");
toBinary8Byte(8,u1);
printf("------------------------\n");
rprint8bits(u2,u1);
}
int makePath(const char* dir,const char* file)
{
strcpy(path,dir);
strcat(path,"/");
strcat(path,file);
return strlen(path);
}
int readFile(char* filename)
{
FILE * f;
int i=0;
char cc;
f=fopen(filename,"r");
if(f==NULL)
{
printf("open %s error.\n",filename);
return -1;
}
for(;!feof(f);i++)
{
cc=fgetc(f);
//putchar(cc);
printf("%d %c\n",cc,cc);
}
fclose(f);
}
void toBinary8Byte(int _1Decimal,char * _8BitStr)
{
int i=0;
int quotient=0;
int remain=0;
int decimal=_1Decimal;
memset(_8BitStr,0,sizeof(char)*ONE_BYTE+1);
do
{
quotient=decimal/2;
remain =decimal%2;
_8BitStr[i]=remain;
printf("%d %d [%c]\n",quotient,remain,_8BitStr[i]);
i++;
decimal=quotient;
}while(quotient!=0);
printf("%s\n",_8BitStr);
}
/*
rstr reverse string.
ostr original string
*/
void rprint8bits(char* rstr,char* ostr)
{
int i=0;
int len=8;
for(;i<len;i++)
{
rstr[R(len,i)]=ostr[i];
}
for(i=0;i<len;i++)
{
printf("%d",rstr[i]);
}
}
三、测试结果