首页 > 解决方案 > 将 char 数组转换为二进制并返回数组

问题描述

我正在尝试将 char 数组转换为十六进制和二进制。然后将这些值作为 char 数组返回以将其写入标准输出。由于我不允许cout用于输出,我将无法使用十六进制 IO 操纵器来完成此操作。同样,也不允许使用格式为 %x 的 printf 系列函数。

constexpr char hexmap[] = {'0', '1', '2', '3', '4', '5', '6', '7',
                           '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

char *hexa(char buffer[],int size){
    string str;
    char *q = new char[10000];
    for( int i = 0; i < size; ++i )
    {
         char const byte = buffer[i];
         q[i] += hexmap[ ( byte & 0xF0 ) >> 4 ];
         q[i] += hexmap[ ( byte & 0x0F ) >> 0 ];
    }
    //  for (int i = 0; i < str.length();i++){
    //  q[i] = str[i];
    //  cout << q[i];
    //  }
    return q;

}

char *binary(char buffer[]){
    string n(buffer);
    int s = n.length(); 
    string t = "";
        for (int i = 0; i <= s; i++)  { 
         int val = int(n[i]); 
         string bin = ""; 
         while (val > 0){
            (val % 2)? bin.push_back('1'):
                bin.push_back('0');
            val /= 2;
         }
         reverse(bin.begin(),bin.end());
             t += bin;
        }
    char *c = new char[t.length()];
    for (int i = 0; i < t.length(); ++i){
       c[i] = t[i];

    }
    return c;             

}
% 猫文件1
你好世界
% ./dog n 5 x 文件1
65486c6c6f
% ./dog n 5 b 文件1
0110010101001000011011000110110001101111

我的结果:

二进制:1001000110111010010010000
十六进制:lk▒▒▒beio▒kbknojbg▒▒b▒lk▒

标签: c++

解决方案


推荐阅读