fork(3) download
  1. #include <iostream>
  2. #include <string>
  3. #include <iomanip>
  4. #include <cstdint>
  5.  
  6. std::string toUTF8(uint32_t cp)
  7. {
  8. char utf8[4];
  9. int len = 0;
  10.  
  11. if (cp <= 0x007F)
  12. {
  13. utf8[0] = static_cast<char>(cp);
  14. len = 1;
  15. }
  16. else
  17. {
  18. if (cp <= 0x07FF)
  19. {
  20. utf8[0] = 0xC0;
  21. len = 2;
  22. }
  23. else if (cp <= 0xFFFF)
  24. {
  25. utf8[0] = 0xE0;
  26. len = 3;
  27. }
  28. else if (cp <= 0x10FFFF)
  29. {
  30. utf8[0] = 0xF0;
  31. len = 4;
  32. }
  33. else
  34. throw std::invalid_argument("invalid codepoint");
  35.  
  36. for(int i = 1; i < len; ++i)
  37. {
  38. utf8[len-i] = static_cast<char>(0x80 | (cp & 0x3F));
  39. cp >>= 6;
  40. }
  41.  
  42. utf8[0] |= static_cast<char>(cp);
  43. }
  44.  
  45. return std::string(utf8, len);
  46. }
  47.  
  48. int main()
  49. {
  50. std::string utf8 = toUTF8(210);
  51.  
  52. std::cout << utf8 << std::endl;
  53.  
  54. std::cout << std::showbase << std::hex << std::setfill('0') << std::setw(2);
  55. for(unsigned char c : utf8)
  56. std::cout << (c & 0xFF) << ' ';
  57. return 0;
  58. }
Success #stdin #stdout 0s 4504KB
stdin
Standard input is empty
stdout
Ò
0xc3 0x92