C++中如何对BYTE类型的字符串按位操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何对BYTE类型的字符串按位操作相关的知识,希望对你有一定的参考价值。

比如说我要按位取反或者说我要查看8位BYTE类型的第3位字符是'0'还是'1'.可能我的提法不是很正确.望大家指教
还有就是,我想对BYTE类型的数据进行按位操作,就是我想对其的每一位都进行操作,问是否可以用循环来实现.
当操作完成后,我的返回值也是BYTE,我是否可以按位查看我的操作是否有效呢,就是让BYTE类型的数据在操作之前能够按位输出,操作以后也能够按位输出,好让我看到操作的效果
可能这种提法不是很清晰,我想做的是编码转换实现,用BYTE类型的数据作为输入码,编码相互转换后在输出,这里可能用到了按位操作

查看第三位是1还是0,只要对该数和下面数求&操作即可
00000100 = 0x04
如 BYTE a;

if(a & 0x04)
cout<<"第三位是 1"<<endl;
else
cout<<"第三位是 0"<<endl;
参考技术A C++支持C语法,所以
unsigned char demo;
按位取反就是 ~demo
第三bit的数值就是(demo>>3)&1
参考技术B BYTE a;
...
a ^= 0x01; //将a的bit0取反
...
if (a & 0x04)

printf("a的第3位为1");

else

printf("a的第3位为0");
参考技术C 路过

Java的按位操作符

本文参考:Java的位操作符

Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作。如果基本类型是char、byte或者short类型的数值进行移位处理,那么会转化成int类型,再进行移位的处理

Java的按位操作符

按位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果。这个操作符有与(&)、非(~)、或(|)、异或(^)。我们知道单位“比特”(bit),即代进制位,都是0和1,异或(^)可能比较复杂点,两个操作数的位中,相同则结果为0,不同则结果为1。那么最基本的逻辑就像下面这个样子。

1&1 → 1
1&0 → 0
~1 → 0
~0 → 1
1|1 → 1
1|0 → 1
1^0 → 1    (1为01,0为00,那么结果就是01,还是1)
1^1 → 0

Java的移位操作符

Java的移位操作符无非就是对二进制进行位移。

进行<<就是左移,也就是所有所有二进制往左边移动一个位,0010 0000 << 1 等于0100 0000

进行>>右移,也就是所有所有二进制往右边移动一个位,0010 0000 >> 1 等于0001 0000 。

可以试试下面的例子,整数型的也是变成二进制来计算:

class Test{
     public static void main(String[] args){
     int numInt1 = 3;
     int numInt2 = -3;
     System.out.println(numInt1<<1);
      System.out.println(numInt1>>1);
System.out.println(numInt2<<1);
 System.out.println(numInt2>>1);

    } 
 }
/* 输出的结果如下(www.breakyizhan.com)
6   --->  0000 0011<<1 , 变为0000 0110
1   --->  0000 0011>>1 , 变为0000 0001...1后面的1被顶出去了,所以结果为1
-6   -->  1111 1101<<1 , 变为1111 1010 取反+1= 0000 0110   -6
-2   -->  1111 1101>>1 , 变为1111 1110 取反+1= 0000 0010   -2 
*/

当然,还有Java的三元操作符,这部分的功能和if-else有点类似,具体更多内容可以看:
Java的三元操作符|Break易站



以上是关于C++中如何对BYTE类型的字符串按位操作的主要内容,如果未能解决你的问题,请参考以下文章

c++如何获取字节BYTE的长度?

Java的按位操作符

Java的按位操作符

java中byte是啥类型

如何将C++中string类型的字符串赋给unsigned char数组

什么是字节变量