我目前正致力于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.
答案 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;
}