您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> C++中如何实现按位读取并分析?

C++中如何实现按位读取并分析?

来源:网络整理     时间:2016/8/28 16:38:07     关键词:

关于网友提出的“ C++中如何实现按位读取并分析?”问题疑问,本网通过在网上对“ C++中如何实现按位读取并分析?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: C++中如何实现按位读取并分析?
描述:

本帖最后由 Fairchild_Lhy 于 2014-09-18 23:59:20 编辑

二进制c++按位读取c

最近在尝试开发一个分析BMP位图信息的小程序。
对于最基本的带调色板的情况,假设是单色的位图,那么调色板共有2种选择,假设0代表黑色,1代表白色。
假设图片宽度为8像素,那么我用unsigned char存放一个字节0x88
那么0x88用二进制按位表示就是10001000,也就代表水平上的8个像素点的颜色分别为“白黑黑黑白黑黑黑”
我想在对话框的客户区重绘出这个位图,那么就需要按位获取像素颜色信息,并且记录下来。
现在我就想,程序要怎么样对这个unsigned char存放的字节按位读取呢?
并且我想把读取来的“1”或者“0”以整型的形式存在一个int类型中。
自己有想过一个方法:
若要取第一位,使用
	unsigned char a = 0x88;
a &= 0x80;
a >>= 7;
cout << static_cast(a);

同理获取第二位使用
	unsigned char a = 0x88;
a &= 0x40;
a >>= 6;
cout << static_cast(a);

但是我感觉这样做实在太麻烦了,针对字节的每个位都要自己写一个读取方法,有没有什么标准宏定义函数可用呢?或者有没有更好的解决方案?先谢谢大家了~
解决方案1:

不知道把你所谓的8位,16位或者32位,转化为二进制处理可以不。这样只需要提供转化为二进制的方法,然后处理二进制来显示所谓的黑白即可。

解决方案2:


// 如果是c,我会这么写:
// 从左向右:
unsigned char a = 0x88;
for (int i = 0; i < 8; i++) {
  cout << static_cast((a>>7) & 1);
  a <<= 1;
}
// 从右向左:
unsigned char a = 0x88;
for (int i = 0; i < 8; i++) {
  cout << static_cast(a & 1);
  a >>= 1;
}
解决方案3:

c++可以考虑用bitset,有个构造函数是这样的,可以一次把32位读到bitset里面
bitset b(unsigned long u);


以上介绍了“ C++中如何实现按位读取并分析?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3637158.html

相关图片

相关文章