关于网友提出的“ 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