将字节转换为位

时间:2010-02-22 07:48:24

标签: visual-studio-2008 visual-c++ managed-c++ visual-studio-express

我目前正致力于visual c ++ 2008 express edition。我的项目基于阅读卫星图像并对其应用图像处理。 每个图像文件都具有“.0FM”格式,大小为8Mb。

到目前为止,我已经能够使用FileStream读取文件(即“* .0FM”)并进入字节数组,字节数组的大小为8,000,000。

然后我将字节数组中的每个元素转换为Decimal,所以现在数组中的每个元素的值都在0到255之间。 现在我必须将数组中的每个Decimal值转换为其二进制值。 例如,86应转换为1010110

我真的被困在这里了。我尝试了System::Decimal::GetBits()方法,但所有这个方法都是将它存储到位[0],

Decimal d = 86;
array<int>^ buf_bits = Decimal::GetBits(d);

此代码导致在buf_bits [0]中存储值86,我没有得到1010110.

2 个答案:

答案 0 :(得分:0)

您不会直接使用这些位。将它们保留为字节。如果您需要检查标志或某些东西,请使用以下技术:

byte mask = 8;
if(myFileData[SomeIndex] & mask > 0)
   // Bit in 4th position is "ON";

答案 1 :(得分:0)

首先,如果您的值介于0到255之间,则应使用byte(或unsigned char)。 比,你需要使用Shift左/右移操作符。

在伪代码中,其中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;
}