将字节转换为位
Posted
技术标签:
【中文标题】将字节转换为位【英文标题】:converting Byte to bit 【发布时间】:2010-02-22 07:48:24 【问题描述】:我目前正在开发visual c++ 2008 express edition。我的项目基于读取卫星图像并对其进行图像处理。 每个图像文件的格式为“.0FM”,大小为 8Mb。
到目前为止,我已经能够使用 FileStream 将文件(即 "*.0FM" )读取到 Byte 数组中,字节数组的大小为 8,000,000。
然后我将字节数组中的每个元素转换为十进制,所以现在数组中的每个元素的值都在 0 到 255 之间。 现在我必须将数组中的每个十进制值转换为其二进制值。 例如,86 应转换为 1010110
我真的被困在这里了。我尝试了System::Decimal::GetBits()
方法,但这个方法所做的只是将 86 存储到 bits[0] 中,
Decimal d = 86;
array<int>^ buf_bits = Decimal::GetBits(d);
此代码导致将值 86 存储在 buf_bits[0] 中,我没有得到 1010110。
【问题讨论】:
您能解释一下为什么需要这些位吗?看起来你在做一些很奇怪的事情。 【参考方案1】:您永远不会直接使用这些位。将它们保留为字节。如果您需要检查标志或其他东西,请使用以下技术:
byte mask = 8;
if(myFileData[SomeIndex] & mask > 0)
// Bit in 4th position is "ON";
【讨论】:
【参考方案2】:首先,如果您的值介于 0 到 255 之间,则应使用字节(或无符号字符)。 比,您需要使用 Shift left / Shift right 运算符。
在伪代码中,其中 num 是您的 0-255 字节:
mask = 1b;
bits = new array[sizeof(BYTE)];
for (i=0; i < sizeof(BYTE); i++)
tmp = num & mask;
bits[i] = tmp >> i;
mask = mask << 1;
【讨论】:
嗨..实际上我必须在图片框控件中显示这些字节值。所以,我想如果我将字节值转换为位,那么在图片框控件中显示字节值可能会很容易.. 在位数组中有 0 和 1。以您想要的任何方式使用它们。直接打印到图片框可能很困难,因为您需要一张图像,其像素代表图形 0 和 1。以上是关于将字节转换为位的主要内容,如果未能解决你的问题,请参考以下文章