Guest User

wchar

a guest
Feb 13th, 2015
2,030
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. /**
  2. 0xxxxxxx
  3. 110xxxxx 10xxxxxx
  4. 1110xxxx 10xxxxxx 10xxxxxx
  5. 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  6. **/
  7.  
  8. //1110 110001
  9.  
  10. int main(int argc, char **argv)
  11. {
  12. setlocale(LC_ALL, "en_US.UTF-8");
  13.  
  14. wchar_t value = L'。';
  15. //我是一只猫。
  16. unsigned int mask0 = 0;
  17. unsigned int mask1 = 49280;
  18. unsigned int mask2= 14712960;
  19. unsigned int mask3= 4034953344;
  20.  
  21. unsigned int v = value;
  22. int size = size_bin(value);
  23. int res = 0;
  24. printf("size %d\n", size);
  25. unsigned char octet;
  26.  
  27. if (size <= 7)
  28. {
  29. octet = value;
  30. write(1, &octet, 1);
  31. }
  32. else if (size <= 11)
  33. {
  34. unsigned char o2 = (v << 26) >> 26; // recuperation des 6 premiers bits 110xxxxx 10(xxxxxx)
  35. unsigned char o1 = ((v >> 6) << 27) >> 27; // recuperation des 5 derniers bits 110(xxxxx) 10xxxxxx
  36.  
  37. octet = (mask1 >> 8) | o1; // application des bits du premier octet sur le premier octet mask
  38. write(1, &octet, 1);
  39. octet = ((mask1 << 24) >> 24) | o2; // application des bits du seond octet sur le second octet du mask
  40. write(1, &octet, 1);
  41. }
  42. else if (size <= 16)
  43. {
  44. unsigned char o3 = (v << 26) >> 26; // recuperation des 6 premiers bits 1110xxxx 10xxxxxx 10(xxxxxx)
  45. unsigned char o2 = ((v >> 6) << 26) >> 26; // recuperation des 6 seconds bits 1110xxxx 10(xxxxxx) 10xxxxxx
  46. unsigned char o1 = ((v >> 12) << 28) >> 28; // recuperation des 4 derniers bits 1110(xxxx) 10xxxxxx 10xxxxxx
  47.  
  48. octet = (mask2 >> 16) | o1; // application des bits du premier octet sur le premier octet mask
  49. write(1, &octet, 1);
  50. octet = ((mask2 << 16) >> 24) | o2; // application des bits du seond octet sur le second octet du mask
  51. write(1, &octet, 1);
  52. octet = ((mask2 << 24) >> 24) | o3; // application des bits du troisieme octet sur le troisieme octet du mask
  53. write(1, &octet, 1);
  54. }
  55. else
  56. {
  57. unsigned char o4 = (v << 26) >> 26; // recuperation des 6 premiers bits 11110xxx 10xxxxxx 10xxxxxx 10(xxxxxx)
  58. unsigned char o3 = ((v >> 6) << 26) >> 26; // recuperation des 6 seconds bits 11110xxx 10xxxxxx 10(xxxxxx) 10xxxxxx
  59. unsigned char o2 = ((v >> 12) << 26) >> 26; // recuperation des 6 seconds bits 11110xxx 10(xxxxxx) 10xxxxxx 10xxxxxx
  60. unsigned char o1 = ((v >> 18) << 29) >> 29; // recuperation des 3 seconds bits 11110(xxx) 10xxxxxx 10xxxxxx 10xxxxxx
  61.  
  62. octet = (mask3 >> 24) | o1; // application des bits du premier octet sur le premier octet mask
  63. write(1, &octet, 1);
  64. octet = ((mask3 << 8) >> 24) | o2; // application des bits du seond octet sur le second octet du mask
  65. write(1, &octet, 1);
  66. octet = ((mask3 << 16) >> 24) | o3; // application des bits du troisieme octet sur le troisieme octet du mask
  67. write(1, &octet, 1);
  68. octet = ((mask3 << 24) >> 24) | o4; // application des bits du quatrieme octet sur le quatrieme octet du mask
  69. write(1, &octet, 1);
  70. }
  71. return (0);
  72. }
Advertisement
Add Comment
Please, Sign In to add comment