Add helper functions for hexdump
authorAndre Heinecke <aheinecke@intevation.de>
Wed, 18 Jul 2018 11:59:45 +0000 (13:59 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Wed, 18 Jul 2018 11:59:45 +0000 (13:59 +0200)
* src/cpphelp.cpp, src/cpphelp.h (is_binary, string_to_hex): New.

src/cpphelp.cpp
src/cpphelp.h

index 20e4794..2dc25a4 100644 (file)
@@ -254,3 +254,39 @@ gpgol_split (const std::string &s, char delim)
   internal_split (s, delim, std::back_inserter (elems));
   return elems;
 }
+
+std::string
+string_to_hex(const std::string& input)
+{
+    static const char* const lut = "0123456789ABCDEF";
+    size_t len = input.length();
+
+    std::string output;
+    output.reserve (3 * len + (len * 3 / 26));
+    for (size_t i = 0; i < len; ++i)
+    {
+        const unsigned char c = input[i];
+        output.push_back (lut[c >> 4]);
+        output.push_back (lut[c & 15]);
+        output.push_back (' ');
+        if (i % 26 == 0)
+          {
+            output.push_back ('\n');
+          }
+    }
+    return output;
+}
+
+bool
+is_binary (const std::string &input)
+{
+  for (int i = 0; i < input.size() - 1; ++i)
+    {
+      const unsigned char c = input[i];
+      if (c < 32 && c != 0x0d && c != 0x0a)
+        {
+          return true;
+        }
+    }
+  return false;
+}
index 953f861..654ab19 100644 (file)
@@ -46,5 +46,11 @@ bool in_de_vs_mode ();
 /* Get a map of all subkey value pairs in a registry key */
 std::map<std::string, std::string> get_registry_subkeys (const char *path);
 
-std::vector<std::string> gpgol_split(const std::string &s, char delim);
+std::vector<std::string> gpgol_split (const std::string &s, char delim);
+
+/* Convert a string to a hex representation */
+std::string string_to_hex (const std::string& input);
+
+/* Check if a string contains a char < 32 */
+bool is_binary (const std::string &input);
 #endif // CPPHELP_H