Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6. bool ToUTF16(int a) //https://cs.wikipedia.org/wiki/UTF-16
  7. {
  8. if (a <= 65536)
  9. {
  10. cout << hex << a;
  11.  
  12. return true;
  13. }
  14. else {
  15. int x = 0x010000;
  16. int lead = 0xD800;
  17. int next = 0xDC00;
  18. int z = a - x;
  19.  
  20. bool f1[10];
  21. bool f2[10];
  22.  
  23. int reg = 1;
  24. for (int i = 0; i < 10; i++)
  25. {
  26. f2[i] = z & reg;
  27. reg = reg << 1;
  28. // cout << reg << endl;
  29. }
  30. for (int i = 0; i < 10; i++)
  31. {
  32. f1[i] = z & reg;
  33. reg = reg << 1;
  34. //cout << f1[i] << endl;
  35. // cout << reg << endl;
  36.  
  37. }
  38.  
  39. int l = 0;
  40. int n = 0;
  41. for (int i = 0; i < 10; i++)
  42. {
  43. if (f1[i])
  44. l = l + pow(2, i);
  45. // cout << l << endl;
  46. if (f2[i])
  47. n = n + pow(2, i);
  48. }
  49. lead = lead + l;
  50. next = next + n;
  51. /*cout << hex << l;
  52. cout << endl;
  53. cout << hex << n;*/
  54. cout << hex << lead << " " << hex << next << endl;
  55. return true;
  56. }
  57. }
  58.  
  59. //https://www.utf8-chartable.de
  60. //https://www.fileformat.info/info/unicode/utf8.htm
  61.  
  62. int get_bit(int val, int n) {
  63. int mask = 1 << n;
  64. int masked_n = val & mask;
  65. int thebit = masked_n >> n;
  66. return thebit;
  67. }
  68.  
  69. int modify_bit(int val, int pos, int b)
  70. {
  71. int mask = 1 << pos;
  72. return (val & ~mask) | ((b << pos) & mask);
  73. }
  74.  
  75. void ToUTF8(int a) {
  76. int mask = 0b10000000;
  77. int locked = 2;
  78.  
  79. if (a <= 127){
  80. cout << hex << a;
  81. }
  82. else if (a <= 2047) {
  83. int mask1st = 0b11000000;
  84. int locked1st = 4;
  85. int val1st = mask1st;
  86.  
  87. int pos = 0;
  88.  
  89.  
  90. for (size_t i = locked1st; i <= 8; i++)
  91. {
  92. val1st = modify_bit(val1st, 8-i, get_bit(a, i - locked1st));
  93. }
  94.  
  95. cout << hex << val1st;
  96.  
  97. }
  98. else if (a <= 65535) {
  99. int mask1st = 0b11100000;
  100. int locked1st = 4;
  101.  
  102. }
  103. else {
  104. int mask1st = 0b11110000;
  105. int locked1st = 5;
  106.  
  107.  
  108. int x = 0x010000;
  109. int lead = 0xD800;
  110. int next = 0xDC00;
  111. int z = a - x;
  112.  
  113. bool f1[10];
  114. bool f2[10];
  115.  
  116. int reg = 1;
  117. for (int i = 0; i < 10; i++)
  118. {
  119. f2[i] = z & reg;
  120. reg = reg << 1;
  121. // cout << reg << endl;
  122. }
  123. for (int i = 0; i < 10; i++)
  124. {
  125. f1[i] = z & reg;
  126. reg = reg << 1;
  127. //cout << f1[i] << endl;
  128. // cout << reg << endl;
  129.  
  130. }
  131.  
  132. int l = 0;
  133. int n = 0;
  134. for (int i = 0; i < 10; i++)
  135. {
  136. if (f1[i])
  137. l = l + pow(2, i);
  138. // cout << l << endl;
  139. if (f2[i])
  140. n = n + pow(2, i);
  141. }
  142. lead = lead + l;
  143. next = next + n;
  144. /*cout << hex << l;
  145. cout << endl;
  146. cout << hex << n;*/
  147. cout << hex << lead << " " << hex << next << endl;
  148. }
  149. }
  150.  
  151.  
  152. int main()
  153. {
  154. int a;
  155. cout << "Imput: ";
  156. cin >> hex >> a;
  157.  
  158. ToUTF16(128);
  159.  
  160.  
  161. return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement