位操作与中文字符问题

1.位操作信息按位存储,占据空间小。但读取比较麻烦。1)信息的按位存储引例:舞台上有八盏灯(1:亮,0:灭);int status[8]={1,0,0,0,1,1,0,1};char staus[]={1,0,0,0,1,1,0,1};应用场景:嵌入式(GPIO,一位连接一根电线);数据压缩编码2)移位位操作一般以unsigned char a=0x13
摘要由CSDN通过智能技术生成

1.位操作

信息按位存储,占据空间小。但读取比较麻烦。

1)信息的按位存储

引例:

舞台上有八盏灯(1:亮,0:灭);

int status[8]={1,0,0,0,1,1,0,1};

char staus[]={1,0,0,0,1,1,0,1};

应用场景:嵌入式(GPIO,一位连接一根电线);

数据压缩编码

2)移位

位操作一般以unsigned char a=0x13;//00010011;

a>>2;//右移两位,000001000;

a<<2;//左移两位,01001100;

空则补零;移位相当于乘除法,但不绝对。

计算能力:对CPU而言,移位比乘除要快。

有符号数:补码等,一般不适用于工程问题。


3)取反操作和与操作

unsigned char b=0x12;//00010010;

unsigned char a=~b;//11101101;

'&':二元操作符:按位比较(全1为1);

应用场景:

(1)判断某一位的状态:

unsigned char flag= a& 0x10;//bit4为1

if(flag){

//亮

}

(2)按位清零

bit2,bit3清零,11110011:0xf3;

unsigned char a &=~(0x03);

(3)综合运用

int year =data[0]>>1;

int month=(data[0]&0x01)<<3+data[1]>>5;

int day=data[1]&0x1f;

4)或操作与base64编码

置1:a|0x08;

六十四(base):

unsigned char data[1024];

3字节转化为4字节

D[0]=data[0]>>2;

D[1]=(data[0]&0x03)<<4+data[1]>>4;

D[2]=(data[1]&0x0F)<<2+data[2]>>6;

D[3]=data[2]&0x3F;

2.中文问题

1)拉丁字符集

ASCII码:'A':65

alpha,beta无法用一个字节表示。

AScII码:0-127,最高位是0.

拉丁字符集:最高位为1.

2)中文字符集

GB2312->GBK(扩展)-》GB18030

BIG:繁体字,“CJK”:中日韩,Unicode统一码:0-0x10FFFF;

中文字符集:最高位也是1;

utf-8/utf-16;utf-32

3)字符编码转换

  (1)gbK->UTF-16

wchar_t宽字符。

char gbk[]="张三';

wchar_t text_utf[256]={0};

int n=MultiByteToWideChar(CP_ACP,0,gbk,strlen(gbk),text_utf,256);

(2)Unicode字符串到多字符串

char text_utf8[256];

int n2=WideCharToMultiByte(CP_UTF8,0,text_utf16,n1,text_utf8,256,NULL,0);//六个字符串。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值