Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "conv_utf.h"
- int utf8_16(FILE *arq_entrada, FILE *arq_saida){
- char *str,c,x1,*strs;
- int i;
- c = fget(arq_entrada);
- while( c != EOF){
- if((c & 0x8000) == 0x8000){
- strs = malloc (2*sizeof(char));
- strs = c + 0xfeff0000;
- fputc(x1,arq_saida);
- }
- else if ((c & 0xc000) == 0xc000){
- i=fread(str,sizeof(char),2,arq_entrada);
- if(i != 2){
- printf(" Erro na leitura \n");
- system("pause");
- exit(1);
- }
- unicode(str,strs,2);
- i=fwrite(strs, sizeof(char),2,arq_saida);
- if(i != 2){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- else if((c & 0xe000) == 0xe000){
- i = fread(str,sizeof(char),3,arq_entrada);
- if(i != 3){
- printf(" Erro na leitura \n");
- system("pause");
- exit(1);
- }
- unicode(str,strs,3);
- i=fwrite(strs, sizeof(char),3,arq_saida);
- if(i != 3){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- else if((c & 0xf000) == 0xf000){
- i = fread(str,sizeof(char),4,arq_entrada);
- if(i != 4){
- printf(" Erro na leitura \n");
- system("pause");
- exit(1);
- }
- unicode(str,strs,4);
- i = fwrite(strs,sizeof(char),4,arq_saida);
- if(i != 4){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- free(strs);
- c = fget(arq_entrada);
- }
- return 0;
- }
- int utf16_8(FILE *arq_entrada, FILE *arq_saida){
- char *strs,str[4], c;
- int i,;
- c = fget(arq_entrada);
- while( i = fread(str,sizeof(char),4,arq_entrada) != 4 ||(c = fget(arq_entrada)) != EOF){
- if(i != 4){
- printf(" Erro na leitura \n");
- system("pause");
- exit(1);
- }
- if((str & 0x0000ffff) <= 0x0000007f){
- strs = malloc (sizeof(char));
- str &= 0x000000ff;
- strs = str;
- j = fwrite(strs,sizeof(char),1,arq_saida);
- if(j != 1){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- if((str & 0x0000ffff)>= 0x00000080 && (str & 0x0000ffff)<= 0x000007ff){
- strs = malloc (2*sizeof(char));
- str &= 0x00000fff; /*0000 0000 0000 0000 0000 1111 1111 1111 */
- strs[0] = 0xc0 + (str>>7);
- strs[1] = 0x80 + (str & 0x3f);
- j = fwrite(strs, sizeof(char), 2, arq_saida);
- if(j != 1){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- if((str & 0x0000ffff)>= 0x00000800 && (str & 0x0000ffff)<= 0x0000ffff){
- strs = malloc (3*sizeof(char)); /*0000 0000 0000 0000 1111 1111 1111 1111 */
- str &= 0x0000ffff;
- str[0] = 0xe0 + (str>>12);
- str[1] = 0x80 + (str>>6 & 0x3f);
- str[2] = 0x80 + (str & 0x3f);
- j = fwrite(strs, sizeof(char),3,arq_saida);
- if(j != 1){
- printf(" Erro na gravacao \n");
- system("pause");
- exit(1);
- }
- }
- if((str & 0x0000ffff)>= 0x00000800 && (str & 0x0000ffff)<= 0x0000ffff){
- }
- free(strs);
- i = fread(str, sizeof(char),4,arq_entrada);
- c = fget(arq_entrada);
- }
- char *nunicode(char *str,char *strs, int n){
- char x1,x2,x3,x4;
- unsigned int u1, u2;
- strs = malloc ((n+1)*sizeof(char));
- strs = 0xfeff + n*0x00;
- if(n==2){
- x1=(str[0] & 0x1f00)>>2;
- x2=(str[1] & 0x003f);
- strs = x1+x2;
- }
- else if(n==3){
- x1 = (str[0] & 0x0f0000)>>4;
- x2 = (str[1] & 0x003f00)>>2;
- x3 = str[2] & 0x00003f;
- strs = x1+x2+x3;
- }
- else {
- x1 = (str[0] & 0x07000000)>>6;
- x2 = (str[1] & 0x003f0000)>>4;
- x3 = (str[2] & 0x00003f00)>>2;
- x4 = str[3] & 0x0000003f;
- u1 = ((x1+x2+x3+x4) - 0x10000)&0x000003ff;
- u1+=0xd800;
- u2 = ((x1+x2+x3+x4) - 0x10000)&0x000ffc00;
- u2+=0xdc00;
- strs = u1+u2;
- }
- return *strs;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement