Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
969 runge 1
 
2
#include <string>
3
 
4
/***************************************************************************
5
 *   Copyright (C) 2004 by Mattias Runge                                   *
6
 *   mattias@mrunge.se                                                     *
7
 *                                                                         *
8
 *   This program is free software; you can redistribute it and/or modify  *
9
 *   it under the terms of the GNU General Public License as published by  *
10
 *   the Free Software Foundation; either version 2 of the License, or     *
11
 *   (at your option) any later version.                                   *
12
 *                                                                         *
13
 *   This program is distributed in the hope that it will be useful,       *
14
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
15
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
16
 *   GNU General Public License for more details.                          *
17
 *                                                                         *
18
 *   You should have received a copy of the GNU General Public License     *
19
 *   along with this program; if not, write to the                         *
20
 *   Free Software Foundation, Inc.,                                       *
21
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
22
 ***************************************************************************/
23
#include "tools.h"
24
 
25
unsigned int bin2uint(string bin)
26
{
27
    unsigned int num = 0;
28
 
29
    for (int n = bin.length()-1; n >= 0; n--)
30
    {
31
        if (bin[n] == '1')
32
            num += (unsigned int)pow(2.0f, (int)(bin.length()-1-n));
33
    }
34
 
35
    return num;
36
}
37
 
38
string invert(string bin)
39
{
40
    string inverted;
41
 
42
    for (int n = 0; n < bin.length(); n++)
43
        inverted += (bin[n] == '1' ? '0' : '1');
44
 
45
    return inverted;
46
}
47
 
48
float bin2float(string bin)
49
{
50
    float num = 0;
51
 
52
    if (bin.length() == 0)
53
        return 0.0f;
54
 
55
    bool isNegative = false;;
56
 
57
    if (bin[0] == '1')
58
    {
59
        bin = invert(bin);
60
        isNegative = true;
61
    }
62
 
63
    for (int n = bin.length()-1; n > 0; n--)
64
    {
65
        if (bin[n] == '1')
66
            num += pow(2.0f, (int)(bin.length()-1-n));
67
    }
68
 
69
    num /= 64.0f;
70
 
71
    if (isNegative)
72
        num = -num;
73
 
74
    return num;
75
}
76
 
77
string bin2hex(string bin)
78
{
79
    string hex;
80
 
81
    while (bin.size() > 0)
82
    {
83
        string part = bin.substr(0, 4);
84
        bin.erase(0, part.size());
85
 
86
        while (part.size() < 4)
87
            part = "0" + part;
88
 
89
        if (part == "0000")
90
            hex += '0';
91
        else if (part == "0001")
92
            hex += '1';
93
        else if (part == "0010")
94
            hex += '2';
95
        else if (part == "0011")
96
            hex += '3';
97
        else if (part == "0100")
98
            hex += '4';
99
        else if (part == "0101")
100
            hex += '5';
101
        else if (part == "0110")
102
            hex += '6';
103
        else if (part == "0111")
104
            hex += '7';
105
        else if (part == "1000")
106
            hex += '8';
107
        else if (part == "1001")
108
            hex += '9';
109
        else if (part == "1010")
110
            hex += 'a';
111
        else if (part == "1011")
112
            hex += 'b';
113
        else if (part == "1100")
114
            hex += 'c';
115
        else if (part == "1101")
116
            hex += 'd';
117
        else if (part == "1110")
118
            hex += 'e';
119
        else if (part == "1111")
120
            hex += 'f';
121
    }
122
 
123
    return hex;
124
}
125
 
126
string float2bin(float num, int length)
127
{
128
    string bin;
129
 
130
    ///FIXME
131
 
132
    while (bin.size() < length)
133
        bin = "0" + bin;
134
 
135
    return bin;
136
}
137
 
138
string hex2bin(string hex)
139
{
140
    hex = strtolower(hex);
141
 
142
    string bin;
143
 
144
    for (int n = 0; n < hex.length(); n++)
145
    {
146
        switch (hex[n])
147
        {
148
            case '0': bin += "0000"; break;
149
            case '1': bin += "0001"; break;
150
            case '2': bin += "0010"; break;
151
            case '3': bin += "0011"; break;
152
            case '4': bin += "0100"; break;
153
            case '5': bin += "0101"; break;
154
            case '6': bin += "0110"; break;
155
            case '7': bin += "0111"; break;
156
            case '8': bin += "1000"; break;
157
            case '9': bin += "1001"; break;
158
            case 'a': bin += "1010"; break;
159
            case 'b': bin += "1011"; break;
160
            case 'c': bin += "1100"; break;
161
            case 'd': bin += "1101"; break;
162
            case 'e': bin += "1110"; break;
163
            case 'f': bin += "1111"; break;
164
        }
165
    }
166
 
167
    return bin;
168
}
169
 
170
string uint2bin(unsigned int num, int length)
171
{
172
    string bin;
173
 
174
    while (num)
175
    {
176
        bin = char((num&1)+'0') + bin;
177
        num >>= 1;
178
    }
179
 
180
    while (bin.size() < length)
181
        bin = "0" + bin;
182
 
183
    return bin;
184
}
185
 
186
 
187
vector<string> explode(string delimiter, string str)
188
{
189
    vector<string> parts;
190
    string::size_type startPos = 0;
191
    string::size_type endPos = 0;
192
 
193
    while ((endPos = str.find(delimiter, startPos)) != string::npos)
194
    {
195
        parts.push_back(str.substr(startPos, endPos-startPos));
196
        startPos = endPos+delimiter.length();
197
    }
198
 
199
    if (startPos < str.length())
200
    {
201
        parts.push_back(str.substr(startPos, str.length()-startPos));
202
    }
203
 
204
    return parts;
205
}
206
 
207
string strtoupper(string s)
208
{
209
    for (unsigned int n = 0; n < s.size(); n++)
210
        s[n] = (char)toupper(s[n]);
211
 
212
    return s;
213
}
214
 
215
string strtolower(string s)
216
{
217
    for (unsigned int n = 0; n < s.size(); n++)
218
        s[n] = (char)tolower(s[n]);
219
 
220
    return s;
221
}
222
 
223
string trim(string s)
224
{
225
    return trim(s, ' ');
226
}
227
 
228
string trim(string s, char c)
229
{
230
    while (s[0] == c)
231
        s.erase(0, 1);
232
 
233
    while (s[s.length()-1] == c)
234
        s.erase(s.length()-1, 1);
235
 
236
    return s;
237
}
238
 
239
int stoi(const string s)
240
{
241
    istringstream in(s);
242
    int i;
243
    in >> i;
244
    return i;
245
}
246
 
247
string itos(int i)
248
{
249
    ostringstream out;
250
    out << i;
251
    return out.str();
252
}
253
 
254
float stof(const string s)
255
{
256
    istringstream in(s);
257
    float f;
258
    in >> f;
259
    return f;
260
}
261
 
262
string ftos(float f)
263
{
264
    ostringstream out;
265
    out << f;
266
    return out.str();
267
}
268
 
269
string str_replace(string search, string replace, string str)
270
{
271
    vector<string> parts = explode(search, str);
272
 
273
    string result;
274
    for (int n = 0; n < parts.size(); n++)
275
    {
276
        result += parts[n];
277
 
278
        if (n < parts.size()-1)
279
            result += replace;
280
    }
281
 
282
    return result;
283
}
284
 
285
string file_get_contents(string filename)
286
{
287
    ifstream srcfile(filename.c_str());
288
 
289
    if (!srcfile.is_open())
290
    {
291
        srcfile.close();
292
        return "";
293
    }
294
 
295
    string buffer = "";
296
    string line;
297
 
298
    while (!srcfile.eof())
299
    {
300
        getline(srcfile, line);
301
 
302
        if (srcfile.eof())
303
            break;
304
 
305
        buffer += line + "\n";
306
    };
307
 
308
    srcfile.close();
309
 
310
    return buffer;
311
}
312
 
313
bool file_exists(string filename)
314
{
315
    ifstream file(filename.c_str());
316
    if (file.is_open())
317
    {
318
        file.close();
319
        return true;
320
    }
321
 
322
    return false;
323
}
324
 
325
string escape(string in)
326
{
327
    string out;
328
 
329
    for (int n = 0; n < in.length(); n++)
330
    {
331
        switch (in[n])
332
        {
976 runge 333
            case '\r':
334
                break;
335
 
969 runge 336
            case '\n':
337
                out += "\\n";
338
                break;
339
 
976 runge 340
            case '\'':
341
                out += "\\'";
342
                break;
343
 
344
            case '"':
345
                out += "\\\"";
346
                break;
347
 
969 runge 348
            default:
349
                out += in[n];
350
                break;
351
        }
352
    }
353
 
354
    return out;
355
}
356
 
976 runge 357
string rpad(string in, int length, char c)
358
{
359
    while (in.length() < length)
360
    {
361
        in += c;
362
    }
363
 
364
    return in;
365
}
366
 
367
string lpad(string in, int length, char c)
368
{
369
    while (in.length() < length)
370
    {
371
        in = c + in;
372
    }
373
 
374
    return in;
375
}
376
 
377
 
969 runge 378
// FileTools
379
 
380
vector<string> FileTools::GetDirList(string path)
381
{
382
    DIR *dir = opendir(path.c_str());
383
    vector<string> list;
384
 
385
    if (!dir)
386
        return list;
387
 
388
    dirent *d;
389
    while ((d = readdir(dir)))
390
    {
391
        if (d->d_name[0] == '.')
392
            continue;
393
 
394
        list.push_back(d->d_name);
395
    }
396
    closedir(dir);
397
 
398
    return list;
399
}
400
 
401
string FileTools::GetUniqeFilename(string path, string prefix, string postfix)
402
{
403
    time_t now;
404
    time(&now);
405
 
406
    string filename = path + prefix + itos(now);
407
 
408
    int index = 0;
409
    while (1)
410
    {
411
        string file = filename + itos(index) + postfix;
412
        if (!Exist(file))
413
            break;
414
        index++;
415
    }
416
 
417
    filename += itos(index) + postfix;
418
 
419
    return filename;
420
}
421
 
422
bool FileTools::SaveFile(string filepath, string data)
423
{
424
    ofstream destfile(filepath.c_str());
425
    if (!destfile.is_open())
426
    {
427
        destfile.close();
428
        return false;
429
    }
430
 
431
    destfile << data;
432
 
433
    destfile.close();
434
    return true;
435
}
436
 
437
string FileTools::Get(string src)
438
{
439
    ifstream srcfile(src.c_str());
440
    if (!srcfile.is_open())
441
    {
442
        srcfile.close();
443
        return "";
444
    }
445
 
446
    string buffer = "";
447
    string line;
448
    while (!srcfile.eof())
449
    {
450
        getline(srcfile, line);
451
        if (srcfile.eof())
452
            break;
453
        buffer += line + "\n";
454
    };
455
 
456
    srcfile.close();
457
 
458
    return buffer;
459
}
460
 
461
bool FileTools::Copy(string src, string dest)
462
{
463
    ifstream srcfile(src.c_str());
464
    if (!srcfile.is_open())
465
    {
466
        srcfile.close();
467
        return false;
468
    }
469
 
470
    ofstream destfile(dest.c_str());
471
    if (!destfile.is_open())
472
    {
473
        destfile.close();
474
        srcfile.close();
475
        return false;
476
    }
477
 
478
    string line;
479
    while (!srcfile.eof())
480
    {
481
        getline(srcfile, line);
482
        if (srcfile.eof())
483
            break;
484
        destfile << line << endl;
485
    };
486
 
487
    destfile.close();
488
    srcfile.close();
489
 
490
    return true;
491
}
492
 
493
bool FileTools::Exist(string filename)
494
{
495
    ifstream file(filename.c_str());
496
    if (file.is_open())
497
    {
498
        file.close();
499
        return true;
500
    }
501
 
502
    return false;
503
}
504
 
505
 
506
 
507
 
508
 
509
/*
510
void bd()
511
{
512
         int n,b=0,a[6],i=0,t=0;
513
         clrscr();
514
         printf("Conversion from Binary to Decimal\n");
515
         printf("Enter Binary Number\n");
516
         scanf("%d",&n);
517
         while(n!=0)
518
         {
519
          a[i]=n%10;
520
          n=n/10;
521
          if(a[i]!=1 && a[i]!=0)
522
           t=1;
523
          i++;
524
         }
525
         a[i]=2;
526
         n=1;
527
         for(i=0;a[i]!=2;i++)
528
         {
529
          b=b+a[i]*n;
530
          n=n*2;
531
         }
532
         if(t==0)
533
          printf("Decimal Equivalent=%d",B);
534
         else if(t==1)
535
          printf("Entered number is not binary.");
536
 
537
}
538
 
539
void db()
540
{
541
         int dec,bin,n,i=0,a[10];
542
         clrscr();
543
         printf("Conversion from Decimal to Binary\n");
544
         printf("Input decimal no.");
545
         scanf("%d",&dec);
546
         do
547
         {
548
         a[i]=dec%2;
549
         dec=dec/2;
550
         i++;
551
         }while(dec!=0);
552
         for(n=i-1;n>=0;n--)
553
         printf("%d",a[n]);
554
}
555
 
556
void doc()
557
{
558
         int n,i,a[10];
559
         clrscr();
560
         printf("Conversion from Decimal to Octal\n");
561
         printf("Enter a Decimal number\n");
562
         scanf("%d",&n);
563
         i=0;
564
         printf("Octal equavalent of %d is ",n);
565
         while(n!=0)
566
         {
567
          a[i]=n%8;
568
          n=n/8;
569
          i++;
570
         }
571
         i--;
572
         for(;i>=0;i--)
573
          printf("%d",a[i]);
574
}
575
 
576
void dh(long n)
577
{
578
         long i;
579
         if(n>0)
580
         {
581
          i=n%16;
582
          n=n/16;
583
          dh(n);
584
          if(i>=10)
585
          {
586
           switch(i)
587
           {
588
            case 10:
589
             printf("A");
590
             break;
591
            case 11:
592
             printf("B");
593
             break;
594
            case 12:
595
             printf("C");
596
             break;
597
            case 13:
598
             printf("D");
599
             break;
600
            case 14:
601
             printf("E");
602
             break;
603
            case 15:
604
             printf("F");
605
             break;
606
           }
607
          }
608
          else
609
           printf("%ld",i);
610
         }
611
}
612
 
613
void od()
614
{
615
         unsigned long n,i=0,a,p=1,t=0;
616
         clrscr();
617
         printf("Conversion from Octal to Decimal\n");
618
         printf("Enter a Octal number\n");
619
         scanf("%ld",&n);
620
         i=0;
621
         printf("Decimal equavalent of %ld",n);
622
         while(n!=0)
623
         {
624
          a=n%10;
625
          if(a>7)
626
           t=1;
627
          n=n/10;
628
          i=i+a*p;
629
          p=p*8;
630
         }
631
         if(t==0)
632
          printf("= %ld",i);
633
         else if(t==1)
634
          printf(" can't be calculated because it is not an Octal Number.\n");
635
}
636
 
637
void ob()
638
{
639
         int n,a[6],i=0,t=0;
640
         clrscr();
641
         printf("Convertion from Octal to Binary.\n");
642
         printf("Enter an Octal Number.\n");
643
         scanf("%d",&n);
644
         while(n!=0)
645
         {
646
          a[i]=n%10;
647
          n=n/10;
648
          if(a[i]>7)
649
           t=1;
650
          i++;
651
         }
652
         i--;
653
         if(t==0)
654
          for(;i>=0;i--)
655
          {
656
           switch(a[i])
657
           {
658
            case 0:
659
             printf("000");
660
             break;
661
            case 1:
662
             printf("001");
663
             break;
664
            case 2:
665
             printf("010");
666
             break;
667
            case 3:
668
             printf("011");
669
             break;
670
            case 4:
671
             printf("100");
672
             break;
673
            case 5:
674
             printf("101");
675
             break;
676
            case 6:
677
             printf("110");
678
             break;
679
            case 7:
680
             printf("111");
681
             break;
682
           }
683
          }
684
         if(t==1)
685
          printf("Not a Octal number\n");
686
}
687
 
688
void bo()
689
{
690
         int i=0,a[5],t=0;
691
         long int n;
692
         clrscr();
693
         printf("Convertion From Binary to Octal\n");
694
         printf("Enter a Binary number\n");
695
         scanf("%ld",&n);
696
         while(n!=0)
697
         {
698
          a[i]=n%1000;
699
          n=n/1000;
700
          if(a[i]>111)
701
           t=1;
702
          i++;
703
         }
704
         i--;
705
         if(t==0)
706
          for(;i>=0;i--)
707
          {
708
           switch(a[i])
709
           {
710
            case 0:
711
             printf("0");
712
             break;
713
            case 1:
714
             printf("1");
715
             break;
716
            case 10:
717
             printf("2");
718
             break;
719
            case 11:
720
             printf("3");
721
             break;
722
            case 100:
723
             printf("4");
724
             break;
725
            case 101:
726
             printf("5");
727
             break;
728
            case 110:
729
             printf("6");
730
             break;
731
            case 111:
732
             printf("7");
733
             break;
734
            default:
735
   printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
736
             break;
737
           }
738
          }
739
         if(t==1)
740
          printf("Number is not Binary\n");
741
}
742
 
743
void bh()
744
{
745
         int i=0,a[5],t=0;
746
         long int n;
747
         clrscr();
748
         printf("Convertion from Binary to Hexadecimal\n");
749
         printf("Enter a Binary number\n");
750
         scanf("%ld",&n);
751
         while(n!=0)
752
         {
753
          a[i]=n%10000;
754
          n=n/10000;
755
          if(a[i]>1111)
756
           t=1;
757
          i++;
758
         }
759
         i--;
760
         if(t==0)
761
          for(;i>=0;i--)
762
          {
763
           switch(a[i])
764
           {
765
            case 0:
766
             printf("0");
767
             break;
768
            case 1:
769
             printf("1");
770
             break;
771
            case 10:
772
             printf("2");
773
             break;
774
            case 11:
775
             printf("3");
776
             break;
777
            case 100:
778
             printf("4");
779
             break;
780
            case 101:
781
             printf("5");
782
             break;
783
            case 110:
784
             printf("6");
785
             break;
786
            case 111:
787
             printf("7");
788
             break;
789
            case 1000:
790
             printf("8");
791
             break;
792
            case 1001:
793
             printf("9");
794
             break;
795
            case 1010:
796
             printf("A");
797
             break;
798
            case 1011:
799
             printf("B");
800
             break;
801
            case 1100:
802
             printf("C");
803
             break;
804
            case 1101:
805
             printf("D");
806
             break;
807
            case 1110:
808
             printf("E");
809
             break;
810
            case 1111:
811
             printf("F");
812
             break;
813
            default:
814
     printf("\nEntered number is not binary.\nPrinted value is not correct.\n");
815
             break;
816
           }
817
          }
818
         if(t==1)
819
          printf("Number is not Binary\n");
820
}
821
 
822
void hb()
823
{
824
         int i;
825
         char s[20];
826
         clrscr();
827
         printf("Convertion from Hexadecimal to Binary\n");
828
         printf("Enter a Hexadecimal number\n");
829
         scanf("%s",s);
830
         //gets(s);
831
         printf("Binary Equivalent=");
832
         for(i=0;s[i]!=NULL;i++)
833
         {
834
          switch(s[i])
835
           {
836
            case '0':
837
             printf("0000");
838
             break;
839
            case '1':
840
             printf("0001");
841
             break;
842
            case '2':
843
             printf("0010");
844
             break;
845
            case '3':
846
             printf("0011");
847
             break;
848
            case '4':
849
             printf("0100");
850
             break;
851
            case '5':
852
             printf("0101");
853
             break;
854
            case '6':
855
             printf("0110");
856
             break;
857
            case '7':
858
             printf("0111");
859
             break;
860
            case '8':
861
             printf("1000");
862
             break;
863
            case '9':
864
             printf("1001");
865
             break;
866
            case 'a':
867
            case 'A':
868
             printf("1010");
869
             break;
870
            case 'b':
871
            case 'B':
872
             printf("1011");
873
             break;
874
            case 'c':
875
            case 'C':
876
             printf("1100");
877
             break;
878
            case 'd':
879
            case 'D':
880
             printf("1101");
881
             break;
882
            case 'e':
883
            case 'E':
884
             printf("1110");
885
             break;
886
            case 'f':
887
            case 'F':
888
             printf("1111");
889
             break;
890
            default:
891
       printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
892
             break;
893
           }
894
          }
895
}
896
 
897
void hd()
898
{
899
         int i,a[20];
900
         unsigned long int h=0,m=1;
901
         char s[20];
902
         clrscr();
903
         printf("Convertion from Hexadecimal to Decimal\n");
904
         printf("Enter a Hexadecimal number\n");
905
         scanf("%s",s);
906
         printf("Decimal Equivalent=");
907
         for(i=0;s[i]!=NULL;i++)
908
         {
909
          switch(s[i])
910
           {
911
            case '0':
912
             a[i]=0;
913
             break;
914
            case '1':
915
             a[i]=1;
916
             break;
917
            case '2':
918
             a[i]=2;
919
             break;
920
            case '3':
921
             a[i]=3;
922
             break;
923
            case '4':
924
             a[i]=4;
925
             break;
926
            case '5':
927
             a[i]=5;
928
             break;
929
            case '6':
930
             a[i]=6;
931
             break;
932
            case '7':
933
             a[i]=7;
934
             break;
935
            case '8':
936
             a[i]=8;
937
             break;
938
            case '9':
939
             a[i]=9;
940
             break;
941
            case 'a':
942
            case 'A':
943
             a[i]=10;
944
             break;
945
            case 'b':
946
            case 'B':
947
             a[i]=11;
948
             break;
949
            case 'c':
950
            case 'C':
951
             a[i]=12;
952
             break;
953
            case 'd':
954
            case 'D':
955
             a[i]=13;
956
             break;
957
            case 'e':
958
            case 'E':
959
             a[i]=14;
960
             break;
961
            case 'f':
962
            case 'F':
963
             a[i]=15;
964
             break;
965
            default:
966
    printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
967
             break;
968
           }
969
         }
970
         i--;
971
         for(;i>=0;i--)
972
         {
973
          h=h+a[i]*m;
974
          m=m*16;
975
         }
976
          printf("%ld ",h);
977
}
978
 
979
void oh(long n)
980
{
981
         long i;
982
         if(n>0)
983
         {
984
          i=n%16;
985
          n=n/16;
986
          oh(n);
987
          if(i>=10)
988
          {
989
           switch(i)
990
           {
991
            case 10:
992
             printf("A");
993
             break;
994
            case 11:
995
             printf("B");
996
             break;
997
            case 12:
998
             printf("C");
999
             break;
1000
            case 13:
1001
             printf("D");
1002
             break;
1003
            case 14:
1004
             printf("E");
1005
             break;
1006
            case 15:
1007
             printf("F");
1008
             break;
1009
           }
1010
          }
1011
          else
1012
           printf("%ld",i);
1013
         }
1014
}
1015
 
1016
void ho()
1017
{
1018
         int i,a[20];
1019
         unsigned long int h=0,m=1;
1020
         char s[20];
1021
         clrscr();
1022
         printf("Convertion from Hexadecimal to Octal\n");
1023
         printf("Enter a Hexadecimal number\n");
1024
         scanf("%s",s);
1025
         // Converting hex to dec first
1026
         for(i=0;s[i]!=NULL;i++)
1027
         {
1028
          switch(s[i])
1029
           {
1030
            case '0':
1031
             a[i]=0;
1032
             break;
1033
            case '1':
1034
             a[i]=1;
1035
             break;
1036
            case '2':
1037
             a[i]=2;
1038
             break;
1039
            case '3':
1040
             a[i]=3;
1041
             break;
1042
            case '4':
1043
             a[i]=4;
1044
             break;
1045
            case '5':
1046
             a[i]=5;
1047
             break;
1048
            case '6':
1049
             a[i]=6;
1050
             break;
1051
            case '7':
1052
             a[i]=7;
1053
             break;
1054
            case '8':
1055
             a[i]=8;
1056
             break;
1057
            case '9':
1058
             a[i]=9;
1059
             break;
1060
            case 'a':
1061
            case 'A':
1062
             a[i]=10;
1063
             break;
1064
            case 'b':
1065
            case 'B':
1066
             a[i]=11;
1067
             break;
1068
            case 'c':
1069
            case 'C':
1070
             a[i]=12;
1071
             break;
1072
            case 'd':
1073
            case 'D':
1074
             a[i]=13;
1075
             break;
1076
            case 'e':
1077
            case 'E':
1078
             a[i]=14;
1079
             break;
1080
            case 'f':
1081
            case 'F':
1082
             a[i]=15;
1083
             break;
1084
            default:
1085
      printf("\nEntered number is not Hexadecimal.\nPrinted value is not correct.\n");
1086
             break;
1087
           }
1088
         }
1089
         i--;
1090
         for(;i>=0;i--)
1091
         {
1092
          h=h+a[i]*m;
1093
          m=m*16;
1094
         }
1095
         // Now convering from decimal to octal (h)
1096
         i=0;
1097
         printf("Octal equavalent=");
1098
         while(h!=0)
1099
         {
1100
          a[i]=h%8;
1101
          h=h/8;
1102
          i++;
1103
         }
1104
         i--;
1105
         for(;i>=0;i--)
1106
          printf("%d",a[i]);
1107
}*/