diff old/simple_pack/base64_de.cpp @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_pack/base64_de.cpp@0c8ae614d421
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/old/simple_pack/base64_de.cpp	Mon Oct 12 09:39:35 2009 +0900
@@ -0,0 +1,91 @@
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+class tagTT
+{
+public:
+  unsigned char buf;
+  char *cont;
+  int nlen;
+};
+
+
+unsigned char CtoNum(int c)
+{
+  if (c >= 'A' && c <= 'Z') return c-'A';
+  if (c >= 'a' && c <= 'z') return (c - 'a')+26;
+  if (c >= '0' && c <= '9') return (c - '0')+52;
+  if (c == '+') return 62;
+  if (c == '/') return 63;
+  return 0;
+}
+
+
+int GetNumB64(tagTT &pWork)
+{
+  char wr;
+  unsigned char w;
+  unsigned char r;
+  
+  wr = *pWork.cont;
+  pWork.cont++;
+  if (wr=='\0' || wr=='=')
+    return -1;
+  
+  while(wr=='\n' || wr=='\t')
+    {
+      wr = *pWork.cont;
+      pWork.cont++;
+    }
+
+  w = CtoNum(wr);
+  if (pWork.nlen == 0)
+    {
+      unsigned char w2;
+
+      wr = *pWork.cont;
+      pWork.cont++;
+      if (wr!='\0' && wr!='=')
+        w2 = CtoNum(wr);
+      else
+        w2 = 0;
+
+      pWork.buf = w << 2;
+      w = w2;
+      pWork.nlen = 6;
+    }
+
+  pWork.nlen -= 2;     
+
+  r = pWork.buf | (w >> pWork.nlen);
+
+  pWork.buf = (w << (8 - pWork.nlen));
+  return r;
+}
+
+
+//int decode(char *cont, char *file_name)
+int decode(char *cont, FILE *outfile)
+{
+  int rw;
+  tagTT work;
+
+  //ofstream outfile(file_name);
+  
+  work.buf = 0;
+  work.nlen = 0;
+  work.cont = cont;
+  
+  rw = GetNumB64(work);
+  while ( rw != -1 ) 
+    {
+      //outfile << (char)rw;
+      putc(rw, outfile);
+      rw = GetNumB64(work);
+    }
+
+  //outfile.close();
+
+  return 0;
+}