Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #include "conv_utf.h"
  2.  
  3. int utf8_16(FILE *arq_entrada, FILE *arq_saida){
  4. char *str,c,x1,*strs;
  5. int i;
  6. c = fget(arq_entrada);
  7. while( c != EOF){
  8. if((c & 0x8000) == 0x8000){
  9. strs = malloc (2*sizeof(char));
  10. strs = c + 0xfeff0000;
  11. fputc(x1,arq_saida);
  12. }
  13. else if ((c & 0xc000) == 0xc000){
  14. i=fread(str,sizeof(char),2,arq_entrada);
  15. if(i != 2){
  16. printf(" Erro na leitura \n");
  17. system("pause");
  18. exit(1);
  19. }
  20. unicode(str,strs,2);
  21. i=fwrite(strs, sizeof(char),2,arq_saida);
  22. if(i != 2){
  23. printf(" Erro na gravacao \n");
  24. system("pause");
  25. exit(1);
  26. }
  27. }
  28. else if((c & 0xe000) == 0xe000){
  29. i = fread(str,sizeof(char),3,arq_entrada);
  30. if(i != 3){
  31. printf(" Erro na leitura \n");
  32. system("pause");
  33. exit(1);
  34. }
  35. unicode(str,strs,3);
  36. i=fwrite(strs, sizeof(char),3,arq_saida);
  37. if(i != 3){
  38. printf(" Erro na gravacao \n");
  39. system("pause");
  40. exit(1);
  41. }
  42. }
  43. else if((c & 0xf000) == 0xf000){
  44. i = fread(str,sizeof(char),4,arq_entrada);
  45. if(i != 4){
  46. printf(" Erro na leitura \n");
  47. system("pause");
  48. exit(1);
  49. }
  50. unicode(str,strs,4);
  51. i = fwrite(strs,sizeof(char),4,arq_saida);
  52. if(i != 4){
  53. printf(" Erro na gravacao \n");
  54. system("pause");
  55. exit(1);
  56. }
  57. }
  58. free(strs);
  59. c = fget(arq_entrada);
  60. }
  61. return 0;
  62. }
  63. int utf16_8(FILE *arq_entrada, FILE *arq_saida){
  64. char *strs,str[4], c;
  65. int i,;
  66. c = fget(arq_entrada);
  67. while( i = fread(str,sizeof(char),4,arq_entrada) != 4 ||(c = fget(arq_entrada)) != EOF){
  68. if(i != 4){
  69. printf(" Erro na leitura \n");
  70. system("pause");
  71. exit(1);
  72. }
  73. if((str & 0x0000ffff) <= 0x0000007f){
  74. strs = malloc (sizeof(char));
  75. str &= 0x000000ff;
  76. strs = str;
  77. j = fwrite(strs,sizeof(char),1,arq_saida);
  78. if(j != 1){
  79. printf(" Erro na gravacao \n");
  80. system("pause");
  81. exit(1);
  82. }
  83. }
  84. if((str & 0x0000ffff)>= 0x00000080 && (str & 0x0000ffff)<= 0x000007ff){
  85. strs = malloc (2*sizeof(char));
  86. str &= 0x00000fff; /*0000 0000 0000 0000 0000 1111 1111 1111 */
  87. strs[0] = 0xc0 + (str>>7);
  88. strs[1] = 0x80 + (str & 0x3f);
  89. j = fwrite(strs, sizeof(char), 2, arq_saida);
  90. if(j != 1){
  91. printf(" Erro na gravacao \n");
  92. system("pause");
  93. exit(1);
  94. }
  95. }
  96. if((str & 0x0000ffff)>= 0x00000800 && (str & 0x0000ffff)<= 0x0000ffff){
  97. strs = malloc (3*sizeof(char)); /*0000 0000 0000 0000 1111 1111 1111 1111 */
  98. str &= 0x0000ffff;
  99. str[0] = 0xe0 + (str>>12);
  100. str[1] = 0x80 + (str>>6 & 0x3f);
  101. str[2] = 0x80 + (str & 0x3f);
  102. j = fwrite(strs, sizeof(char),3,arq_saida);
  103. if(j != 1){
  104. printf(" Erro na gravacao \n");
  105. system("pause");
  106. exit(1);
  107. }
  108. }
  109. if((str & 0x0000ffff)>= 0x00000800 && (str & 0x0000ffff)<= 0x0000ffff){
  110.  
  111. }
  112. free(strs);
  113. i = fread(str, sizeof(char),4,arq_entrada);
  114. c = fget(arq_entrada);
  115. }
  116. char *nunicode(char *str,char *strs, int n){
  117. char x1,x2,x3,x4;
  118. unsigned int u1, u2;
  119. strs = malloc ((n+1)*sizeof(char));
  120. strs = 0xfeff + n*0x00;
  121. if(n==2){
  122. x1=(str[0] & 0x1f00)>>2;
  123. x2=(str[1] & 0x003f);
  124. strs = x1+x2;
  125. }
  126. else if(n==3){
  127. x1 = (str[0] & 0x0f0000)>>4;
  128. x2 = (str[1] & 0x003f00)>>2;
  129. x3 = str[2] & 0x00003f;
  130. strs = x1+x2+x3;
  131. }
  132. else {
  133. x1 = (str[0] & 0x07000000)>>6;
  134. x2 = (str[1] & 0x003f0000)>>4;
  135. x3 = (str[2] & 0x00003f00)>>2;
  136. x4 = str[3] & 0x0000003f;
  137. u1 = ((x1+x2+x3+x4) - 0x10000)&0x000003ff;
  138. u1+=0xd800;
  139. u2 = ((x1+x2+x3+x4) - 0x10000)&0x000ffc00;
  140. u2+=0xdc00;
  141. strs = u1+u2;
  142. }
  143. return *strs;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement