fork(2) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <sstream>
  5. #include <iomanip>
  6.  
  7. void test1(const std::string &test)
  8. {
  9. size_t numbytes = test.size() / 2;
  10.  
  11. std::vector<unsigned char> bytearray;
  12. bytearray.reserve(numbytes);
  13.  
  14. for (size_t w = 0, x = 0; w < numbytes; ++w, x += 2) {
  15. unsigned char b;
  16.  
  17. char c = test[x];
  18. if ((c >= '0') && (c <= '9'))
  19. b = (c - '0');
  20. else if ((c >= 'A') && (c <= 'F'))
  21. b = 10 + (c - 'A');
  22. else if ((c >= 'a') && (c <= 'f'))
  23. b = 10 + (c - 'a');
  24. else {
  25. // error!
  26. break;
  27. }
  28.  
  29. b <<= 4;
  30.  
  31. c = test[x+1];
  32. if ((c >= '0') && (c <= '9'))
  33. b |= (c - '0');
  34. else if ((c >= 'A') && (c <= 'F'))
  35. b |= 10 + (c - 'A');
  36. else if ((c >= 'a') && (c <= 'f'))
  37. b |= 10 + (c - 'a');
  38. else {
  39. // error!
  40. break;
  41. }
  42.  
  43. bytearray.push_back(b);
  44. }
  45.  
  46. std::cout << "1: ";
  47. for(auto b : bytearray)
  48. std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)b << " ";
  49. std::cout << std::endl;
  50. }
  51.  
  52. void test2(const std::string &test)
  53. {
  54. size_t numbytes = test.size() / 2;
  55.  
  56. std::vector<unsigned char> bytearray;
  57. bytearray.reserve(numbytes);
  58.  
  59. for(size_t w = 0, x = 0; w < numbytes; ++w, x += 2)
  60. {
  61. std::istringstream iss(test.substr(x, 2));
  62. unsigned short b;
  63.  
  64. if (!(iss >> std::hex >> b)) {
  65. // error!
  66. break;
  67. }
  68.  
  69. bytearray.push_back(static_cast<unsigned char>(b));
  70. }
  71.  
  72. std::cout << "2: ";
  73. for(auto b : bytearray)
  74. std::cout << std::setw(2) << std::setfill('0') << std::hex << (int)b << " ";
  75. std::cout << std::endl;
  76. }
  77.  
  78. int main()
  79. {
  80. std::string test = "48656c6c6f20576f726c64";
  81. std::cout << test << std::endl;
  82. test1(test);
  83. test2(test);
  84. return 0;
  85. }
Success #stdin #stdout 0s 4564KB
stdin
Standard input is empty
stdout
48656c6c6f20576f726c64
1: 48 65 6c 6c 6f 20 57 6f 72 6c 64 
2: 48 65 6c 6c 6f 20 57 6f 72 6c 64