Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <math.h>
- using namespace std;
- bool ToUTF16(int a) //https://cs.wikipedia.org/wiki/UTF-16
- {
- if (a <= 65536)
- {
- cout << hex << a;
- return true;
- }
- else {
- int x = 0x010000;
- int lead = 0xD800;
- int next = 0xDC00;
- int z = a - x;
- bool f1[10];
- bool f2[10];
- int reg = 1;
- for (int i = 0; i < 10; i++)
- {
- f2[i] = z & reg;
- reg = reg << 1;
- // cout << reg << endl;
- }
- for (int i = 0; i < 10; i++)
- {
- f1[i] = z & reg;
- reg = reg << 1;
- //cout << f1[i] << endl;
- // cout << reg << endl;
- }
- int l = 0;
- int n = 0;
- for (int i = 0; i < 10; i++)
- {
- if (f1[i])
- l = l + pow(2, i);
- // cout << l << endl;
- if (f2[i])
- n = n + pow(2, i);
- }
- lead = lead + l;
- next = next + n;
- /*cout << hex << l;
- cout << endl;
- cout << hex << n;*/
- cout << hex << lead << " " << hex << next << endl;
- return true;
- }
- }
- //https://www.utf8-chartable.de
- //https://www.fileformat.info/info/unicode/utf8.htm
- int get_bit(int val, int n) {
- int mask = 1 << n;
- int masked_n = val & mask;
- int thebit = masked_n >> n;
- return thebit;
- }
- int modify_bit(int val, int pos, int b)
- {
- int mask = 1 << pos;
- return (val & ~mask) | ((b << pos) & mask);
- }
- void ToUTF8(int a) {
- int mask = 0b10000000;
- int locked = 2;
- if (a <= 127){
- cout << hex << a;
- }
- else if (a <= 2047) {
- int mask1st = 0b11000000;
- int locked1st = 4;
- int val1st = mask1st;
- int pos = 0;
- for (size_t i = locked1st; i <= 8; i++)
- {
- val1st = modify_bit(val1st, 8-i, get_bit(a, i - locked1st));
- }
- cout << hex << val1st;
- }
- else if (a <= 65535) {
- int mask1st = 0b11100000;
- int locked1st = 4;
- }
- else {
- int mask1st = 0b11110000;
- int locked1st = 5;
- int x = 0x010000;
- int lead = 0xD800;
- int next = 0xDC00;
- int z = a - x;
- bool f1[10];
- bool f2[10];
- int reg = 1;
- for (int i = 0; i < 10; i++)
- {
- f2[i] = z & reg;
- reg = reg << 1;
- // cout << reg << endl;
- }
- for (int i = 0; i < 10; i++)
- {
- f1[i] = z & reg;
- reg = reg << 1;
- //cout << f1[i] << endl;
- // cout << reg << endl;
- }
- int l = 0;
- int n = 0;
- for (int i = 0; i < 10; i++)
- {
- if (f1[i])
- l = l + pow(2, i);
- // cout << l << endl;
- if (f2[i])
- n = n + pow(2, i);
- }
- lead = lead + l;
- next = next + n;
- /*cout << hex << l;
- cout << endl;
- cout << hex << n;*/
- cout << hex << lead << " " << hex << next << endl;
- }
- }
- int main()
- {
- int a;
- cout << "Imput: ";
- cin >> hex >> a;
- ToUTF16(128);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement