C++小程序:单个汉字与其二进制编码(字符串形式)的互转

/*
       本小程序通过自定义函数形式,实现汉字字符与二进制字符串的互转。程序涉及的基础知识包括位的左右移运算、位的或与运算等。通过编写或研习此小程序可以巩固C++基础知识。
       程序代码及详细注释见下:
*/
#include<iostream>
using namespace std;
#include<bitset>
//二进制字符串转char类型字符
char StrToChar(char str[])  
     //说明:汉字由两个8位字节组成,调用本函数时一个字节调用一次(即一次只输入8为字符),返回的char字符连在一起显示
{
    char chr = 0;
    for (int i = 0; i < 8; ++i)
        //
    {
        chr = (chr << 1) | (str[i] - '0');
        /*
        上面这个语句是该子程序的核心语句。从运算优先级上看"chr<<1"本可以不加括号,因为其优先于与运算符"|",这里加上括号是为了看起来更加明显。
        先看右边的括号(str[i] - '0'),从参数str各位的取值范围只有"1"或"0"两个字符。字符"1"
的ASCII值是49(dec) 0011 0001(bin),字符"0"的ASCII值是48(dec) 0011 0000 (bin)。每一次循环,如str某位等于'1'减'0'后,结果用二进制表示就是 0000 0001、如等于'0'结果就是 0000 0000。
        再看左边的括号(chr << 1),是左移运算;每循环一次就将chr的每个二进制位向左移动1位,最左边的一位被挤出去,最右边空出来的一位补0。如1010 0101<<1变成0100 1010。
        两个括号间的是或运算符"|",将左移运算后的结果与右边括号的结果按位做或运算;通过8次循环,就将由0或1组成8位的字符串转换成二进制的8位字符。
        */
    }
    return chr;
}
//单个汉字转二进制形式的字符串
char* CharToStr(char * chr)
   //说明:输入的汉字为单个汉字,返回的二进制字符串长度为16
{
    char* Str = new char[16];
    int k = 0;
    for (int i = 0; i<2; i++)
    {
        for (int j = 7; j >=0; j--)
        {
            if ((chr[i] >> j & 1) == 1)
                //这里的原理同上边相同,类似逆运算,不过多解释
            {
                Str[k] = '1';
            }
            else
            {
                Str[k] = '0';
            }
            k++;
        }
    }
return Str;
delete[] Str;
}

int main()
{
    //下面是“你”字的的前后8位二进制字符串作为参数调用StrToChr
    char str1[] = "11000100";
    char str2[] = "11100011";
    char chr1 = StrToChar(str1);
    char chr2 = StrToChar(str2); 
    printf("%c%c", chr1, chr2); //将返回值显示
    cout << "\n========================================="<<endl;
    //下面再把“你”字作为参数调用CharToStr
    char chr[] = "你";
    char* str =  CharToStr(chr);
    for (int i = 0; i < 16; i++)
    {
         printf("%c",str[i]);
         if (i == 7||i==16)printf("\n");
    }
    system("pause");
    return 0;
}

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值